文章总结: 本文介绍了AI智能体平台白盒审计中的权限控制类漏洞审计思路,主要通过定位敏感函数和参数,分析调用链,判断是否存在权限控制缺陷。文章详细列举了用户认证、授权、访问控制列表、用户管理和JWT认证等模块的常见漏洞代码示例及风险分析,并提供了敏感参数和关键词搜索方法,帮助审计人员快速定位潜在的权限控制问题。建议在审计时关注这些敏感模块和参数,使用提供的关键词进行搜索,以确保系统权限控制的安全性。
综合评分: 85
文章分类: 代码审计,WEB安全,AI安全,漏洞分析,安全建设
AI智能体平台白盒审计思路(权限控制篇)
原创
tdragon6
平安集团安全应急响应中心
2025年8月14日 18:01
上海
上篇SSRF类介绍了针对服务端请求的白盒审计思路,本篇从权限控制类进行介绍,其审计思路依旧是通过定位漏洞触发关键敏感函数,逐步审计调用链,判断关键参数是否由用户可控的外部传入或存在硬编码的不安全内容,如果这些因素都具备,就会存在漏洞。本篇主要整理了权限控制类漏洞的关键敏感词以供参考,文章还是以Python开发语言举例。
0x01 敏感模块或函数
1、用户认证模块
@app.route("/login", methods=["POST"])def login(): username = request.json.get("username") password = request.json.get("password") # 简单的身份验证逻辑 if username == "admin" and password == "admin123": return {"status": "success", "role": "admin"} else: return {"status": "fail"}
风险分析:如果认证逻辑简单且凭证存储不当(如明文存储),攻击者可能通过暴力破解或猜测密码轻易获取管理员权限。此外,如果未对认证失败尝试次数进行限制,可能导致账户被恶意登录尝试攻破。
2、授权模块
@app.route("/view_secret", methods=["GET"])def view_secret(): user_role = request.headers.get("user_role") if user_role == "admin": # 简单的角色授权检查 return "Secret information" else: return "Forbidden", 403
风险分析:仅通过请求头中的user\_role来判断用户权限是不安全的,因为攻击者可以篡改请求头中的角色信息来越权访问敏感信息。正确的做法应该是从服务器端获取用户角色信息,并进行严格的授权检查。
3、访问控制列表(ACL)模块
acl = { "resource1": ["user1", "user2"], "resource2": ["user3"]}@app.route("/access_resource", methods=["POST"])def access_resource(): user = request.json.get("user") resource = request.json.get("resource") if resource in acl and user in acl[resource]: return "Access granted" else: return "Access denied"
风险分析:如果 ACL 的配置不当,如未定期更新、存在过宽泛的权限设置或未正确验证用户的当前状态(如是否已注销),攻击者可能利用这些漏洞访问未授权的资源。
4、用户管理模块
@app.route("/add_user", methods=["POST"])def add_user(): admin_user = request.json.get("admin_user") new_user = request.json.get("new_user") # 检查是否为管理员 if admin_user in admin_list: user_list.append(new_user) return "User added" else: return "Permission denied", 403
风险分析:如果对管理员身份的验证不严格(如仅通过简单的列表查找而没有考虑身份验证和会话管理),攻击者可能伪造管理员身份来添加恶意用户,从而扩大攻击面。
5、JWT认证模块
import jwtSECRET_KEY = "your_secret_key" # 密钥应存储在安全的位置@app.route("/login_jwt", methods=["POST"])def login_jwt(): username = request.json.get("username") password = request.json.get("password") # 假设验证通过 if username == "admin" and password == "admin123": # 创建JWT令牌 token = jwt.encode({"username": username, "role": "admin"}, SECRET_KEY, algorithm="HS256") return {"token": token} else: return {"status": "fail"}@app.route("/protected", methods=["GET"])def protected(): token = request.headers.get("Authorization").split(" ")[1] try: # 验证和解析JWT令牌 payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"]) if payload["role"] == "admin": return "Protected data" else: return "Forbidden", 403 except jwt.ExpiredSignatureError: return "Token expired", 401 except jwt.InvalidTokenError: return "Invalid token", 401
风险分析:
· 密钥泄露:如果SECRET\_KEY泄露,攻击者可以生成和验证自己的JWT令牌,从而越权访问系统。
· 令牌过期未处理:如果令牌过期时间设置过长或未正确处理过期令牌,攻击者可能使用已过期的令牌进行未授权访问。
· 不安全的签名算法:使用不安全的签名算法(如None算法)可能导致令牌被篡改而无法检测。
· 未正确验证令牌:如果未对令牌进行严格的验证(如未检查签名、过期时间和发行者等),可能导致未授权的访问。
0x02 敏感参数
在白盒审计时可以关注以下一些参数,这些往往是参与鉴权功能的参数,容易出现权限控制类问题。
0x03 关键词搜索
在白盒审计时,可以在代码库中进行以下正则或关键词搜索,帮助定位潜在的权限控制类漏洞
1、用户认证相关
- auth.authenticate(|verify\credentials(|login(|check\password(|authenticate_user(:匹配用户认证相关的函数,用于检查用户身份验证过程是否安全。
- session.create(|generate\token(|create\session(|set\_cookie(|issue_token(:匹配会话创建和令牌生成函数,确保会话管理和身份验证令牌的安全性。
- jwt.encode(|jwt.decode(|jwt.verify(|generate_jwt(|create_token(:匹配JWT令牌生成和验证相关的函数,确保JWT认证过程的安全性。
2、授权相关
- check\permission(|verify\role(|authorize(|has\privilege(|access\allowed(:匹配授权检查函数,确保只有具有适当权限的用户才能执行敏感操作。
- grant\permission(|revoke\permission(|assign\role(|set\privileges(|add\to\group(:匹配权限分配和修改函数,防止权限被不当授予或撤销。
3、访问控制列表(ACL)相关
- acl.get(|acl.set(|acl.check(|acl.update(|acl.remove(:匹配 ACL 管理函数,确保资源访问控制列表的正确配置和使用。
- resource.allow(|resource.deny(|resource.check\_access(|resource.grant(|resource.revoke(:匹配与资源访问控制相关的函数,防止未授权的资源访问。
4、用户管理相关
- add\user(|create\user(|delete\user(|modify\user(|update\_user(:匹配用户管理函数,确保用户添加、删除和修改操作的安全性和合法性。
- user.activate(|user.deactivate(|user.suspend(|user.enable(|user.disable(:匹配用户状态管理函数,防止攻击者通过改变用户状态来绕过安全控制。
5、权限策略相关
- policy.create(|policy.delete(|policy.update(|policy.apply(|policy.attach(:匹配权限策略管理函数,确保权限策略的创建、更新和应用过程安全。
- policy.allow(|policy.deny(|policy.check(|policy.evaluate(|policy.enforce(:匹配权限策略评估和执行函数,防止不安全的权限策略被执行。
6、JWT认证相关
- jwt.encode(|jwt.decode(|jwt.verify(|generate_jwt(|create_token(|sign_token(|validate_token(:匹配JWT令牌生成、签名、验证相关的函数,确保JWT认证过程的安全性。
- secret_key\s*=\s*[“\’][^”\’]+[“\’]|JWT_SECRET\s*=\s*[“\’][^”\’]+[“\’]:匹配JWT密钥的定义和使用,查找可能存在的硬编码密钥问题。
- exp\s*:\s*\d+|expires_in\s*=\s*\d+:匹配JWT令牌的过期时间设置,检查过期时间是否合理,以防止令牌过期时间过长导致的安全风险。
7、其他敏感操作相关
- exec-as(|run-as(|sudo(|su-(root|user))|setuid(|setgid(:匹配以其他用户身份执行操作的函数,确保这些操作被严格控制和审计。
- elevate-privileges(|drop-privileges(|raise-privileges(|lower-privileges(|set-privileges(:匹配权限提升和降低的函数,防止权限不当提升导致的安全风险。
点赞、分享,感谢你的阅读▼
▼ 点击阅读原文,进入官网
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:平安集团安全应急响应中心 tdragon6《AI智能体平台白盒审计思路(权限控制篇)》