
2025/12/20 3:15
Reverse Engineering US Airline's PNR System and Accessing All Reservations
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
記事では、Avelo Airlines の予約 API が 2025 年 10 月 15 日に深刻なセキュリティ欠陥を抱えていたことが説明されており、その時点で Avelo はメールで即座に通知された。脆弱性は、認証済みユーザー(任意のセッションクッキー)なら、6 文字の英数字確認コードを推測することで完全な予約情報を取得できるというものであった。このシステムには姓の検証やレートリミットが欠けていた。アルファベットは 36 文字で構成されるため、可能なコード数は 36⁶ = 2,176,782,336 通りとなり、制限なしに数分から数時間でブルートフォース攻撃が容易に実行できた。著者は自分のクッキーを使用しつつランダムコードでリクエストを送信し、API が有効な任意のコードについて完全な個人情報と支払データを返すことを確認した。Avelo のサイバーセキュリティチームは 2025 年 10 月 16 日に対応メールをやり取りし、不足していたチェック点を指摘、2025 年 11 月 13 日に本番環境へ修正プログラムを展開した。著者は独自にパッチを検証し、その後技術ブログ記事を書いた。同時に別の予約エンドポイントにも同様の欠陥が見つかり、公開前に修正された。未修正のままだと、攻撃者は約 6 時間(またはヒット時には数分)で何百万もの PNR を列挙し、完全な PII(政府発行 ID 番号を含む)、部分的なクレジットカード情報、旅行履歴、および予約の変更やキャンセル権限を漏洩させる可能性がある。今回のケースは、多要素確認(コード+姓)や列挙可能エンドポイントへの厳格なレートリミット、適切な認証スコープ設定の必要性を示しており、Avelo の迅速かつプロフェッショナルな開示対応が他組織の模範とされている。
本文
タイムラインと責任ある開示
- 初期連絡(2025年10月15日) – 脆弱性を発見したらすぐにAvelo Airlinesのセキュリティ担当者へメールを送信。
- 2025年10月16日 – Avelo のサイバーセキュリティチームが迅速に回答し、姓検証の欠如と予約エンドポイントでのレート制限未設定について詳細なメール交換を実施。
- 2025年11月13日 – Avelo が本番環境へ修正プログラムを投入し、問題がパッチされた旨を通知。私は公開前に変更内容を検証。
- 2025年11月20日 – 本技術ブログ記事を公開し、Avelo の協力的かつ迅速な対応を強調。
Avelo チームはプロフェッショナルで、深刻度を認識し迅速に修正、そして明確なコミュニケーションを保ちました。これはセキュリティ開示の模範例です。
脆弱性
午前9時にアッカド語クラスを終えた後、Avelo Airlines でフライト変更を試みていました。ネットワークトラフィックを監視中に、不審なリクエストが目立ち、重要な情報漏洩欠陥を発見しました。
- 攻撃者が得られるもの:Avelo の全乗客の予約詳細―PII(氏名・生年月日・性別)、政府ID番号、部分的な支払情報など。
- 重要性:有効な認証クッキーを持つ誰でもこの脆弱性を利用できる。
航空会社のログインは通常こうあるべき
フライト予約にアクセスするには通常:
- 確認コード
- 乗客の姓
この二要素チェックは、確認コード(6文字英数字)と全ての可能な姓を組み合わせることで天文学的に大きなキー空間を作り、列挙が不可能になります。
姓検証が欠如すると極めて簡略化されます:
- キー空間:36文字(A–Z, 0–9)
- 長さ:6
- 総組み合わせ数:36⁶ = 2,176,782,336 (~21億8千万)
これは天文学的に大きいとは言えず、現代のブルートフォース攻撃で到達可能です。
攻撃タイムライン
| リクエストレート | 全組み合わせを消費する時間 |
|---|---|
| 1 000 req/s(控えめなスクリプト) | 約25日 |
| 10 000 req/s(適度なサーバー) | 約2.5日 |
| 100 000 req/s(小規模クラスター、$400–$700) | 約6時間 |
結論: レート制限も姓検証もない状態であれば、攻撃者は約 6時間 で全乗客データを取得でき、費用は千ドル未満。
さらに高速に実行可能です。約800万枚のチケットが販売されているとき、成功率は1/270程度。正しいPIIは数秒以内に返ってきます。
欠陥発見経緯
予約変更中に次のGETリクエストを観測:
https://www.aveloair.com/payment/services/reservation/{code}
このエンドポイントは姓検証なしで全予約データを返し、認証クッキーだけが必要でした。友人の古い確認コードと自分のクッキーを使うと完全な予約情報が取得できました。
複数スレッド Python スクリプトを作成し、ランダムに生成した6文字コードでエンドポイントへアクセスしました。WAF・IPブロック・CAPTCHAは存在せず、リクエストは通過。数分以内に何百件もの有効予約が確認できました。
別の予約エンドポイントでも同様の脆弱性を発見し、公開前に Avelo が迅速に修正しました。
漏洩したデータ
各有効コードで API は以下を返しました:
- 完全な乗客 PII:氏名・生年月日・性別
- 政府 ID:KNTs、パスポート番号
- 連絡先情報:電話、メール
- 旅程:フライト番号、日付・時刻、座席位置
- 支払詳細:マスクされたカード番号、有効期限、請求 ZIP コード
- バウチャー & PCI データ:アカウント番号、金額、部分磁気ストライプデータ
(元レポートにはカード情報と KNT の例も含まれています)
影響
この欠陥により:
- 数百万の予約コードを高速で列挙可能(約6時間ブルートフォースまたは数分のスクリプト)。
- アイデンティティ詐欺/不正利用のための包括的 PII の収集。
- 部分的なカード情報と旅行履歴へのアクセス。
- すべての予約を変更・キャンセルでき、広範囲にわたる混乱を引き起こし得る。
主な教訓
- 複数要素(確認コード+姓) を必須とすることで機密データへのアクセスを制限。
- すべての列挙可能エンドポイントにレート制限 を実装。
- 認証クッキーは個々のユーザーセッションに限定。
Avelo の迅速な対応と修正は、責任ある開示、明確なコミュニケーション、そして迅速な是正が顧客データ保護に不可欠であることを改めて示しています。