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()
修复方案
-
升级版本:
- 这是最直接有效的修复方式。请访问 JumpServer 官方网站或 GitHub 发布页面,下载并升级到最新的安全版本。官方通常会在新版本中修补已知的越权漏洞。
-
重置 Access Key:
- 如果怀疑 AK 已经泄露,应立即在 JumpServer 控制台中为受影响的用户重置 Access Key。
- 路径通常为:
用户管理->选择用户->重置 Access Key。
-
最小权限原则:
- 为每个用户或服务账户分配最小的必要权限。避免使用高权限账户进行日常 API 调用。
- 定期轮换 Access Key,减少密钥长期有效带来的风险。
-
网络访问控制:
- 限制 JumpServer API 接口的访问来源 IP,仅允许信任的管理网段或应用服务器访问。
- 启用 WAF(Web 应用防火墙),配置规则拦截异常的 API 请求模式。
-
监控与告警:
- 启用 JumpServer 的审计日志功能,监控敏感操作。
- 设置告警机制,当检测到非正常时间的 API 调用或大量失败登录尝试时,及时通知管理员。
通过上述措施,可以有效缓解 Access Key 泄露带来的风险,保障运维环境的安全。建议定期进行安全评估和渗透测试,以发现并修复潜在的安全隐患。
浙公网安备 33010602011771号