
osTicketのajax.tickets.phpにおけるBOLA/IDOR脆弱性 | 責任ある開示
ajax.tickets.phpにおけるBOLA / IDOR壊れたオブジェクトレベル認可(BOLA): 安全でない直接オブジェクト参照(IDOR)
include/ajax.tickets.php→viewField()関数
@JF0x0r 氏による報告 · 2026年3月27日 ステータス: 修正済み - osTicket v1.17.8 / v1.18.4 で修正版リリース
| 項目 | 詳細 |
|---|---|
| 脆弱性 | BOLA / IDOR(壊れたオブジェクトレベル認可) |
| 対象 | osTicket v1.18-git - コミット 2570d69 |
| コンポーネント | include/ajax.tickets.php |
| 関数 | viewField() - 805〜806行 |
| エンドポイント | GET /scp/ajax.php/tickets/{ticket_id}/field/{field_id}/view |
| CVSS 4.0スコア | 8.2 HIGH - AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N |
| CWE | CWE-862(認可の欠如)、CWE-639(ユーザー制御キーによる認証バイパス) |
| ステータス | ✅ 修正済み — osTicket v1.17.8 および v1.18.4 で修正 |
私はJuan Felipe Oz(@JF0x0r)です。オープンソースセキュリティに情熱を注ぐセキュリティ研究者です。バウンティのためにこの活動をしているのではなく、人々が依存するツールは安全であるべきだと信じているからです。何かを見つけたときは、責任を持って報告し、適切に文書化し、修正がリリースされた後に公開しています。
osTicketのAJAXサブシステムを手動でコードレビューしていたとき、ajax.tickets.phpに何か異常があることに気付きました。viewField()関数はチケットフィールドデータを表示するリクエストを処理します。チケットオブジェクトの取得とフィールドの存在確認は行いますが、リクエストを行ったエージェントが実際にそのチケットへのアクセス権限を持っているかを決してチェックしていません。
checkStaffPerm()の呼び出しなし。部署の検証なし。何もありません。
つまり、認証されたエージェントであれば誰でも、たとえ単一の部署に厳密に制限されているエージェントでも、ticket_idとfield_idを知っているか推測するだけで、システム内の他のどの部署のチケットフィールドでも読み取ることができます。これらは連続する整数のため、列挙は簡単です。
この問題を特に明確にしているのは、同じファイル内のすぐ上にある姉妹関数editField()との比較です。editField()は$ticket->checkStaffPerm($thisstaff, Ticket::PERM_EDIT)を正しく呼び出し、違反時にはHTTP 403を返します。書き込みに対する修正はすでに実装されていましたが、読み取りには単に適用されていなかったのです。
管理されたラボ環境で、エクスプロイトのエンドツーエンドの完全なデモを録画しました。
動画では以下の流れを説明しています:
agent_aこのリポジトリのexploit.pyスクリプトは、全チェーン(認証 → 列挙 → 不正なフィールドアクセス)を自動化し、手動テストを超えて問題が拡大することを確認するために評価中に使用されました。
ticket_id / field_id整数により、一括スクレイピングが容易になるviewField()への1行の挿入です。チケットオブジェクトの取得直後に、editField()がすでに正しく行っている処理をそのまま反映します。完全な技術的詳細、差分、CVSSの内訳は添付のレポートに記載されています。
📄 BOLA_IDOR_osTicket_Report_v2.pdf
osTicketはこの報告を確認し、要求されたフィールドの解決/レンダリングの前に$ticket->checkStaffPerm($thisstaff)を追加することで緩和策を実装しました。これはeditField()にすでに存在するチェックを反映したものです。スタッフはフィールドデータを表示する前に、親チケットへのアクセス権を持っている必要があります。
osTicketは、完全なエクスプロイト手順を公開する前に、短期間のアップグレード猶予期間を設けることを推奨しています。このリポジトリはその指針に従っています - 以下の開示タイムラインを参照してください。
.
├── README.md # This file
├── BOLA_IDOR_osTicket_Report_v2.pdf # Full technical disclosure report
├── exploit.py # PoC automation script
└── PoC_osTicket.mov # Local copy of the demo video
私は何かを公開する前に、この問題をosTicketセキュリティチームに非公開で報告しました。このリポジトリは、責任ある開示期間の経過後にのみ公開され、公式パッチがリリースされた今、完全な詳細レポートを利用可能にしています。osTicketのメンテナでご質問がある場合は、GitHub経由で直接お気軽にお問い合わせください。
@JF0x0r による発見 · オープンソースのセキュリティは重要です。
| 詳細 | リファレンス |
|---|
| パッチコミット | d590a9770d25159fb7741681f36e23a35f1fb5e9 |
| 修正バージョン | v1.17.8 · v1.18.4 |
| 公式ダウンロード | osticket.com/download |
| リリース種別 | 緊急セキュリティリリース |
| 謝辞 | Juan Felipe Oz(@JF0x0r) |
| 日付 | イベント |
|---|
| 2026年3月27日 | 脆弱性を発見し文書化 |
| 2026年3月27日 | [email protected]に報告書を送付 |
| 2026年6月17日 | osTicketが問題を確認し、検証用の緩和パッチを共有 |
| 2026年6月17日 | osTicketが修正を含むv1.17.8およびv1.18.4をリリース(コミットd590a9770d25159fb7741681f36e23a35f1fb5e9) |
| — | GitHub CNAによるCVE採番待ち |