
CVE-2026-79983 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जो Apache Camel camel-ftp कंज़्यूमर्स में पाथ ट्रैवर्सल है, जिसमें दुर्भावनापूर्ण FTP सर्वर फ़िक्स्चर और प्रभावित बनाम ठीक किए गए बिल्ड शामिल हैं।
Apache Camel की उस भेद्यता के लिए चलाने योग्य प्रूफ-ऑफ-कॉन्सेप्ट पुनरुत्पादक, जहाँ रिमोट-फ़ाइल उपभोक्ता किसी
रिमोट सर्वर पर एक निर्देशिका को पोल करते हैं और प्रत्येक फ़ाइल का निरपेक्ष रिमोट पथ कॉन्फ़िगर की गई
निर्देशिका को सर्वर की निर्देशिका लिस्टिंग में बताए गए फ़ाइल नाम के साथ जोड़कर बनाते हैं, बिना किसी
लेक्सिकल नॉर्मलाइज़ेशन के और बिना यह जाँचे कि परिणाम पोल की गई निर्देशिका के भीतर ही रहता है। वह पथ फिर
पुनर्प्राप्ति (सदैव) के लिए ऑपरेंड बन जाता है, और विलोपन या नाम बदलने के लिए भी जब delete=true, move,
preMove, moveFailed या readLock=rename कॉन्फ़िगर किया गया हो।
लिस्टिंग का नाम रूट-नियंत्रित डेटा नहीं है — यह रिमोट सर्वर द्वारा प्रदान किया जाता है, और FTP कंट्रोल चैनल
में कोई अखंडता सुरक्षा नहीं है, इसलिए ऑन-पाथ हमलावर LIST प्रतिक्रिया को फिर से लिख सकता है, और एक
समझौता किया गया या मल्टी-टेनेंट सर्वर सीधे ऐसा नाम उत्सर्जित कर सकता है। प्रलेखित, डिफ़ॉल्ट रूप से सक्षम
jailStartingDirectory विकल्प ने इस रिमोट ऑपरेंड को नियंत्रित नहीं किया।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-ftp 4.22.0 (प्रभावित; 4.22.1 में ठीक किया गया) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-ftp 3.29.0 (Camel 4.15.0, प्रभावित) |
यह फ़िक्स Camel 4.18.5 / 4.22.1 / 4.23.0 में आता है; Spring Boot मॉड्यूल प्रभावित बिल्ड (4.22.0) और फ़िक्स किए गए बिल्ड (4.22.1) दोनों को चलाता है। अभी तक किसी भी जारी किए गए Camel Quarkus में फ़िक्स किया गया Camel शामिल नहीं है।
ऐप एक जानबूझकर दुर्भावनापूर्ण FTP सर्वर (इन-मेमोरी VFS के साथ Apache MINA FtpServer) एम्बेड करता है जो
पोल की गई निर्देशिका /upload में सूचीबद्ध करता है:
normal.txt — निर्देशिका के भीतर एक वैध फ़ाइल, औरd/../../outside.txt — एक तैयार की गई प्रविष्टि जिसका नाम एकल पथ खंड नहीं है। यह डॉट से शुरू नहीं होता
(इसलिए Camel का छिपी-फ़ाइल नियम इसे नहीं पकड़ता), और /upload + d/../../outside.txt का समाधान
/outside.txt होता है, जो पोल की गई निर्देशिका से एक स्तर ऊपर है।एक सादा Camel FTP उपभोक्ता /upload को पोल करता है। प्रभावित बिल्ड पर यह दोनों प्रविष्टियाँ पुनर्प्राप्त
करता है — जिसमें /outside.txt भी शामिल है, एक ऐसी फ़ाइल जहाँ उसे कभी नहीं पहुँचना चाहिए। फ़िक्स किए गए
बिल्ड पर यह normal.txt रखता है और बाहर निकलने वाली प्रविष्टि को छोड़ देता है, लॉग करते हुए
Skipping file as it resolves outside the starting directory: upload/d/../../outside.txt।
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर अपेक्षित आउटपुट:
What the Camel consumer retrieved:
name=[normal.txt] (inside)
name=[d/../../outside.txt] <<< FILE FROM OUTSIDE THE POLLED DIRECTORY
content: OUTSIDE-SECRET (/outside.txt, a file the consumer should never reach)
Paths the server was asked to read:
upload/normal.txt -> /upload/normal.txt
upload/d/../../outside.txt -> /outside.txt
| गुण | मान |
|---|---|
| घटक | camel-ftp (ftp, ftps, sftp स्कीम) |
| CWE | CWE-22 (किसी पथनाम का प्रतिबंधित निर्देशिका तक अनुचित सीमन) |
| गंभीरता | उच्च |
| आक्रमण वेक्टर | एक LIST प्रविष्टि (सर्वर-प्रदत्त, अनधिप्रमाणित FTP नियंत्रण चैनल पर पुनर्लेखन योग्य) जो एकल पथ खंड नहीं है |
| प्रभाव | पढ़ें — और, delete/move/readLock=rename के साथ, एंडपॉइंट के क्रेडेंशियल्स का उपयोग करते हुए, पोल की गई निर्देशिका के बाहर की फ़ाइलों को हटाएं या नाम बदलें |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24487 |
| श्रेय | NSSL, SJTU से Dilrevx |
सलाह: https://camel.apache.org/security/CVE-2026-79983.html
एक विभाजक-जागरूक GenericFileHelper.isWithinDirectory ओवरलोड और एक GenericFileConsumer.isWithinStartingDirectory
रणनीति (jailStartingDirectory सक्षम होने पर isValidFile से परामर्श ली जाती है) हल किए गए पथ को संक्षिप्त करते हैं और
पथ-खंड सीमाओं पर सत्यापित करते हैं कि यह अभी भी पोल की गई निर्देशिका के भीतर ही हल होता है। बाहर हल होने वाली फ़ाइल को
चेतावनी के साथ छोड़ दिया जाता है (ताकि उसी लिस्टिंग में अन्य वैध प्रविष्टियाँ अभी भी संसाधित हों)। RemoteFileConsumer और
SmbConsumer इस जाँच को ओवरराइड करते हैं; स्थानीय आधार कार्यान्वयन एक नो-ऑप है, क्योंकि स्थानीय लिस्टिंग नाम हमेशा
एकल खंड होते हैं।
ftp के बजाय sftp/ftps को प्राथमिकता दें ताकि लिस्टिंग को पारगमन में पुनर्लिखित न किया जा सके, और होस्ट कुंजी/प्रमाणपत्र सत्यापित करें।
केवल एकल-खंड नाम स्वीकार करने के लिए उपभोक्ता को filter, antInclude या include से सीमित करें, और उन सर्वरों के विरुद्ध
delete=true/move/preMove/moveFailed/readLock=rename से बचें जिनकी लिस्टिंग पूरी तरह विश्वसनीय नहीं है।
जहाँ संभव हो, सर्वर खाते को पोल की गई निर्देशिका तक सीमित रखें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने में मदद करने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाती है। दुर्भावनापूर्ण सर्वर और "secret" निष्क्रिय स्थानीय फ़िक्स्चर हैं। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।