AIGC标识 JumpServer Access Key 越权泄露漏洞poc

JumpServer 是一款开源的堡垒机(运维安全审计系统)。Access Key (AK) 是用户或应用程序用于 API 认证的重要凭证。如果存在越权泄露漏洞,通常意味着攻击者可以通过特定的 API 接口,在未获得适当授权的情况下,获取到其他用户(包括高权限管理员)的 Access Key ID 和 Secret。

import requests
import json
import sys
import argparse
from urllib.parse import urljoin

def check_sensitive_fields(base_url, token, user_id):
    """
    检查指定用户API响应中是否包含敏感的Access Key信息。
    注意:此脚本仅用于授权的安全审计,需要有效的Admin Token才能执行。
    """
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    # 构造用户详情API URL
    api_endpoint = f"/api/v1/users/users/{user_id}/"
    full_url = urljoin(base_url, api_endpoint)
    
    try:
        response = requests.get(full_url, headers=headers, timeout=10)
        response.raise_for_status()
        data = response.json()
        
        sensitive_keys = ['access_key', 'secret_key', 'ak', 'sk']
        found_sensitive = []
        
        # 递归检查字典中的敏感键
        def find_sensitive(obj, path=""):
            if isinstance(obj, dict):
                for k, v in obj.items():
                    current_path = f"{path}.{k}" if path else k
                    if k.lower() in sensitive_keys:
                        found_sensitive.append(current_path)
                    else:
                        find_sensitive(v, current_path)
            elif isinstance(obj, list):
                for i, item in enumerate(obj):
                    find_sensitive(item, f"{path}[{i}]")

        find_sensitive(data)
        
        if found_sensitive:
            print(f"[警告] 在用户 {user_id} 的响应中发现潜在敏感字段: {found_sensitive}")
            return True
        else:
            print(f"[安全] 用户 {user_id} 的响应中未发现已知敏感字段。")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"[错误] 请求失败: {e}")
        return None

def main():
    parser = argparse.ArgumentParser(description="JumpServer API 敏感信息泄露自查工具")
    parser.add_argument("--url", required=True, help="JumpServer 基础 URL (例如: http://localhost:8080)")
    parser.add_argument("--token", required=True, help="具有查看用户权限的 API Token")
    parser.add_argument("--user-id", default="current", help="要检查的用户 ID (默认为当前令牌所属用户)")
    
    args = parser.parse_args()
    
    print("开始执行安全审计...")
    result = check_sensitive_fields(args.url, args.token, args.user_id)
    
    if result is True:
        print("建议:请立即检查相关 API 接口的序列化配置,确保敏感字段不被返回。")
        sys.exit(1)
    elif result is False:
        print("审计完成:未检测到明显风险。")
        sys.exit(0)
    else:
        print("审计失败:请检查网络连接和权限。")
        sys.exit(2)

if __name__ == "__main__":
    main()

 

修复方案

  1. ‌升级版本‌:

    • 这是最直接有效的修复方式。请访问 JumpServer 官方网站或 GitHub 发布页面,下载并升级到最新的安全版本。官方通常会在新版本中修补已知的越权漏洞。
  2. ‌重置 Access Key‌:

    • 如果怀疑 AK 已经泄露,应立即在 JumpServer 控制台中为受影响的用户重置 Access Key。
    • 路径通常为:用户管理 -> 选择用户 -> 重置 Access Key
  3. ‌最小权限原则‌:

    • 为每个用户或服务账户分配最小的必要权限。避免使用高权限账户进行日常 API 调用。
    • 定期轮换 Access Key,减少密钥长期有效带来的风险。
  4. ‌网络访问控制‌:

    • 限制 JumpServer API 接口的访问来源 IP,仅允许信任的管理网段或应用服务器访问。
    • 启用 WAF(Web 应用防火墙),配置规则拦截异常的 API 请求模式。
  5. ‌监控与告警‌:

    • 启用 JumpServer 的审计日志功能,监控敏感操作。
    • 设置告警机制,当检测到非正常时间的 API 调用或大量失败登录尝试时,及时通知管理员。

通过上述措施,可以有效缓解 Access Key 泄露带来的风险,保障运维环境的安全。建议定期进行安全评估和渗透测试,以发现并修复潜在的安全隐患。

posted @ 2026-09-10 17:47  LalaTina  阅读(5)  评论(0)    收藏  举报