safer_getattr 是库自带的安全 getattr 替代品——拒绝 _ 前缀属性、INSPECT_ATTRIBUTES 受限名,以及 str 上的 format / format_map(safe_builtins['_getattr_'] 的默认值就是它)。policy_getattr 记录完日志后拿它兜底"正常访问",这是嵌入方的典型姿势:自己的策略套在库提供的安全原语外面。
在两个容器内运行(方案 B/C 则在对应 venv / PYTHONPATH 下运行同一文件):
docker compose exec -T sandbox-vuln python /srv/poc_local.py # exit 0
docker compose exec -T sandbox-fixed python /srv/poc_local.py # exit 2
两个版本的实测输出(容器内真实执行):
# 8.2
RestrictedPython version: 8.2
f(O()) -> 'shadowed' (policy hook calls: [])
VERDICT: VULNERABLE (policy hook was shadowed, access policy bypassed)
# 8.3
RestrictedPython version: 8.3
compile_restricted raised SyntaxError: ('Line 2: "_getattr_" is an invalid variable name because it starts with "_"',)
VERDICT: PATCHED (guard shadowing is rejected at compile time)
注意判定条件的设计:calls == [] 证明的是受信策略 hook 一次都没执行,而不是"读到了 secret"。这个区分后面还会反复出现——它决定了我们能把结论推多远。
专业黑客业务:渗透网站/网址 棋牌入侵破解 脚本搭建 ddos攻击/cc攻击 舆论删除/负面删除 BC博彩/投顾/股票/电子签/贷款/各类资料 学信网录入/改分/改档案 盘口改单/不中改中 域名劫持/Dns劫持 Pg赔率/爆率 Gov站点业务
技术小黄鸭🟡:@Xiaohyaa
在两个容器内运行(方案 B/C 则在对应 venv / PYTHONPATH 下运行同一文件):
docker compose exec -T sandbox-vuln python /srv/poc_local.py # exit 0
docker compose exec -T sandbox-fixed python /srv/poc_local.py # exit 2
两个版本的实测输出(容器内真实执行):
# 8.2
RestrictedPython version: 8.2
f(O()) -> 'shadowed' (policy hook calls: [])
VERDICT: VULNERABLE (policy hook was shadowed, access policy bypassed)
# 8.3
RestrictedPython version: 8.3
compile_restricted raised SyntaxError: ('Line 2: "_getattr_" is an invalid variable name because it starts with "_"',)
VERDICT: PATCHED (guard shadowing is rejected at compile time)
注意判定条件的设计:calls == [] 证明的是受信策略 hook 一次都没执行,而不是"读到了 secret"。这个区分后面还会反复出现——它决定了我们能把结论推多远。
专业黑客业务:渗透网站/网址 棋牌入侵破解 脚本搭建 ddos攻击/cc攻击 舆论删除/负面删除 BC博彩/投顾/股票/电子签/贷款/各类资料 学信网录入/改分/改档案 盘口改单/不中改中 域名劫持/Dns劫持 Pg赔率/爆率 Gov站点业务
技术小黄鸭🟡:@Xiaohyaa