一、漏洞简介

1.1 漏洞背景

Oracle GlassFish Enterprise Server(原 Sun GlassFish Enterprise Server)是一个商业版的应用服务器,提供了完整的企业级 Java EE 支持。该产品广泛用于金融、电信、政府等关键行业。

在 2011 年 4 月的 Oracle Critical Patch Update 中,Oracle 披露了 CVE-2011-0807 漏洞。这是一个严重的管理接口漏洞,允许未经认证的攻击者通过网络完全控制服务器,包括执行任意代码、读取敏感数据、修改配置等。

1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)

项目 内容
漏洞编号 CVE-2011-0807
危害等级 HIGH / 10.0
漏洞类型 GlassFish Enterprise Server 管理接口远程代码执行漏洞
披露时间 2011-04-20
影响组件 GlassFish
属性 详情
CVE编号 CVE-2011-0807
危害等级 严重(Critical)
CVSS评分 10.0 (CVSS:2.0/AV:N/AC:L/Au:N/C:C/I:C/A:C)
漏洞类型 远程代码执行(Remote Code Execution)/ 认证绕过
CWE分类 CWE-94: Improper Control of Generation of Code ('Code Injection')
<hr />

补充核验信息:公开时间:2011-04-20;NVD 评分:10.0(HIGH)。

二、影响范围

2.1 受影响的版本

根据 Oracle 官方公告:

产品 受影响版本
Sun GlassFish Enterprise Server 2.1, 2.1.1
Sun Java System Application Server 9.1, 3.0.1

2.2 不受影响的版本

  • Oracle GlassFish Server 3.1.1 及以上(已修复)
  • 已应用 2011 年 4 月 CPU 补丁的版本

2.3 触发条件(如特定模块、特定配置、特定运行环境等)

  1. 管理控制台端口(默认 4848)对外开放
  2. 攻击者能够访问该端口
  3. 无需有效凭据即可利用
<hr />

三、漏洞详情与原理解析

3.1 漏洞触发机制

根据 Oracle 官方公告,CVE-2011-0807 影响管理(Administration)组件。漏洞可能涉及以下几个方面:

  1. 管理接口认证缺陷:管理控制台的认证机制存在绕过可能
  2. 远程管理协议漏洞:允许未授权的远程管理命令执行
  3. 部署接口滥用:通过应用部署功能上传恶意代码

攻击向量:

攻击者 → 管理端口(4848) → 绕过认证 → 执行管理命令 → 完全控制服务器

3.2 源码层面的根因分析(结合源码与补丁对比)

基于 Oracle 公告和 CVSS 评分(10.0 满分),推测漏洞涉及:

可能的漏洞代码(伪代码示例):

// 管理接口处理(漏洞假设)
public class AdminConsoleHandler {

    public void handleAdminRequest(HttpServletRequest request) {
        // 获取管理操作
        String operation = request.getParameter("operation");

        // 认证检查可能存在缺陷
        if (!isAuthenticated(request)) {
            // 某些操作可能绕过此检查
            // 或者认证逻辑存在漏洞
        }

        // 执行管理操作
        executeAdminCommand(operation, request);
    }

    private void executeAdminCommand(String operation, HttpServletRequest req) {
        // 直接执行敏感操作,缺乏足够的权限检查
        switch(operation) {
            case "deploy":
                deployApplication(req);
                break;
            case "configure":
                updateConfiguration(req);
                break;
            // 可能存在未授权可访问的危险操作
        }
    }
}

可能的利用方式:

  1. 利用默认或空密码的管理员账户
  2. 利用会话管理缺陷
  3. 利用 JMX/RMI 远程接口
<hr />

四、漏洞复现(可选)

4.1 环境搭建

使用 Docker 搭建测试环境:

# docker-compose.yml
version: '3'
services:
  glassfish-vulnerable:
    image: glassfish:vulnerable-version  # 需要自行构建或找到镜像
    ports:
      - "4848:4848"
      - "8080:8080"
      - "8686:8686"  # JMX 端口
    environment:
      - ADMIN_PASSWORD=  # 空密码或默认密码

注意事项: - 此漏洞较为敏感,公开的 PoC 较少 - 建议在隔离环境中测试 - 仅用于安全研究和授权测试

4.2 PoC 演示与测试过程

基础探测脚本:

#!/usr/bin/env python3
"""
GlassFish CVE-2011-0807 漏洞探测脚本
仅用于安全研究和授权渗透测试
"""

import requests
import urllib3

urllib3.disable_warnings()

def check_glassfish_version(target):
    """检测 GlassFish 版本"""
    url = f"http://{target}:4848/"

    try:
        response = requests.get(url, verify=False, timeout=10)
        server = response.headers.get('Server', '')
        print(f"[*] 服务器头: {server}")

        # 检查版本信息
        if 'GlassFish' in server or 'Sun Java System' in server:
            print("[+] 检测到 GlassFish 服务器")
            return True
        return False
    except Exception as e:
        print(f"[-] 连接失败: {e}")
        return False

def check_admin_console(target):
    """检查管理控制台访问"""
    url = f"https://{target}:4848/"

    try:
        response = requests.get(url, verify=False, timeout=10)

        if response.status_code == 200:
            print("[+] 管理控制台可访问")

            # 检查是否需要认证
            if 'login' in response.text.lower():
                print("[*] 需要认证")
            else:
                print("[!] 可能无需认证即可访问")

        return response.status_code
    except Exception as e:
        print(f"[-] 检查失败: {e}")
        return None

def test_default_credentials(target):
    """测试默认凭据"""
    url = f"https://{target}:4848/j_security_check"

    credentials = [
        ('admin', ''),
        ('admin', 'admin'),
        ('admin', 'password'),
        ('admin', 'adminadmin'),
    ]

    for username, password in credentials:
        try:
            response = requests.post(
                url,
                data={
                    'j_username': username,
                    'j_password': password,
                },
                verify=False,
                timeout=10,
                allow_redirects=False
            )

            if response.status_code in [302, 200]:
                print(f"[!] 可能存在弱口令: {username}:{password}")

        except Exception as e:
            pass

def main():
    print("=" * 60)
    print("GlassFish CVE-2011-0807 漏洞探测工具")
    print("警告: 仅用于授权安全测试")
    print("=" * 60)

    target = input("输入目标 IP: ")

    print("\n[1] 检测服务器版本...")
    check_glassfish_version(target)

    print("\n[2] 检查管理控制台...")
    check_admin_console(target)

    print("\n[3] 测试默认凭据...")
    test_default_credentials(target)

    print("\n" + "=" * 60)
    print("探测完成")

if __name__ == "__main__":
    main()

命令行利用示例:

# 使用 asadmin 命令行工具(如果有凭据)
asadmin --host target --port 4848 list-applications

# 尝试部署恶意应用
asadmin --host target --port 4848 deploy malicious.war
<hr />

五、修复建议与缓解措施

5.1 官方版本升级建议

立即行动:

# 检查当前版本
asadmin version

# 升级到安全版本
# 下载并安装 GlassFish 3.1.1 或更高版本

应用官方补丁:

  1. 访问 Oracle Support 网站
  2. 下载 2011 年 4 月 CPU 补丁
  3. 按照补丁说明应用更新

5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)

方案一:网络隔离(强烈推荐)

# 限制管理端口仅允许内网访问
iptables -A INPUT -p tcp --dport 4848 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 4848 -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 4848 -j DROP

# 同时限制 JMX 端口
iptables -A INPUT -p tcp --dport 8686 -j DROP

方案二:强化认证

# 修改管理员密码
asadmin change-admin-password

# 启用安全 admin
asadmin enable-secure-admin

# 重启服务
asadmin restart-domain

方案三:禁用远程管理

<!-- domain.xml 配置 -->
<config name="server-config">
    <admin-service system-jmx-connector-name="system" type="das-and-server">
        <!-- 禁用远程 JMX 连接器 -->
        <jmx-connector enabled="false" name="system" />
    </admin-service>
</config>

方案四:Web 服务器代理

# Nginx 反向代理配置
upstream glassfish_admin {
    server 127.0.0.1:4848;
}

server {
    listen 443 ssl;
    server_name admin.example.com;

    # 强制客户端证书认证
    ssl_client_certificate /path/to/ca.crt;
    ssl_verify_client on;

    location / {
        proxy_pass http://glassfish_admin;
    }
}
<hr />

六、参考信息 / 参考链接

6.1 官方安全通告

  • Oracle Critical Patch Update - April 2011: https://www.oracle.com/security-alerts/cpuapr2011.html
  • Oracle Security Alert CVE-2011-0807: https://www.oracle.com/technetwork/topics/security/cpuapr2011-301950.html
  • My Oracle Support Note 1291877.1 (需要 Oracle 账户)

6.2 其他技术参考资料

  • CVSS 10.0 漏洞分析: https://www.first.org/cvss/calculator/3.0
  • Oracle GlassFish Security Guide: https://docs.oracle.com/cd/E18930_01/html/821-2418/
  • CWE-94 Code Injection: https://cwe.mitre.org/data/definitions/94.html
  • OWASP Remote Code Execution: https://owasp.org/www-community/vulnerabilities/Remote_Code_Execution
<hr />

总结

漏洞对比表

CVE编号 漏洞类型 CVSS评分 影响版本 修复版本
CVE-2017-1000028 路径遍历/文件读取 7.5 ≤ 4.1.0 ≥ 5.0
CVE-2010-1622 目录遍历(Spring) 5.0 Spring ≤ 3.0.1 Spring ≥ 3.0.2
CVE-2011-0807 远程代码执行 10.0 ≤ 3.0.1 ≥ 3.1.1

关键安全建议

  1. 立即升级:所有 GlassFish 服务器应升级到 5.0+ 版本
  2. 网络隔离:管理端口(4848)不应直接暴露在公网
  3. 强化认证:使用强密码并启用安全认证
  4. 定期审计:定期检查服务器配置和安全补丁状态

通用防护措施

# 1. 检查当前版本
asadmin version

# 2. 修改管理员密码
asadmin change-admin-password

# 3. 启用安全管理
asadmin enable-secure-admin

# 4. 配置防火墙
iptables -A INPUT -p tcp --dport 4848 -j DROP
iptables -A INPUT -p tcp --dport 4848 -s 127.0.0.1 -j ACCEPT

# 5. 定期更新
# 订阅 Oracle 安全公告
# https://www.oracle.com/security-alerts/
<hr />

附录:常用安全检测命令

# 检查开放的端口
netstat -tlnp | grep glassfish

# 检查运行的服务
ps aux | grep glassfish

# 检查日志文件
tail -f $GLASSFISH_HOME/domains/domain1/logs/server.log

# 检查配置文件
cat $GLASSFISH_HOME/domains/domain1/config/domain.xml | grep -i security

# 检查已部署的应用
asadmin list-applications

# 检查管理员用户
asadmin list-file-users --authrealmname admin-realm
<hr />

免责声明:本文档仅用于安全研究和授权测试目的。未经授权对他人系统进行渗透测试是违法行为。使用本文档中的任何技术前,请确保已获得明确授权。

文档版本:v1.0 最后更新:2026-03-21 作者:安全研究团队