
画像: RobertAx、ゲッティイメージズ/iStockphoto
セキュリティ研究者のチームが、現代のインターネットが URL を解析する方法に重大な欠陥があることを発見しました。具体的には、一貫性のないルールを持つ URL パーサーが多すぎるため、巧妙な攻撃者によって簡単に悪用されるワールドワイド Web が作成されているということです。
URL 解析が実際に操作されて壊滅的な影響をもたらす例を見つけるのに、それほど苦労する必要はありません。2021 年後半の Log4j エクスプロイトはその完璧な例であると研究者はレポートで述べています。
「Log4j は人気があるため、何百万台ものサーバーとアプリケーションが影響を受け、管理者は環境内のどこに Log4j が存在するか、そして実際に概念実証攻撃にさらされているかどうかを特定する必要に迫られた」と報告書は述べている。
参照: Google Chrome: 知っておくべきセキュリティと UI のヒント(TechRepublic Premium)
Log4j について深く説明しなくても、基本的には、ログに記録されると、被害者と攻撃者のマシンを接続する Java 検索をトリガーする悪意のある文字列を使用し、ペイロードを配信するために使用されます。
Log4j に最初に実装された対策は、ホワイトリストに登録されたサイトへの Java ルックアップのみを許可するというものでした。攻撃者はすぐにこの修正を回避する方法を見つけ、悪意のある URL に localhost を追加し、# 記号で区切ることでパーサーを混乱させ、攻撃を継続できることを発見しました。
Log4j は深刻な問題でした。URL という普遍的なものに依存していたという事実が、事態をさらに深刻にしています。URL 解析の脆弱性がいかに危険であるかを理解するには、それが何を意味するのかを正確に理解することが重要です。そして、このレポートはまさにその点を的確に示しています。

画像: Claroty/Team82/Snyk
図Aの色分けされたURLは、アドレスを5つの異なる部分に分解したことを示しています。URLが初めて定義された1994年には、URLを機械語に変換するシステムが作成され、それ以来、いくつかの新しいRFC(Request for Comment)によってURL標準がさらに詳細化されてきました。
残念ながら、すべてのパーサーが新しい標準に対応しているわけではありません。つまり、多くのパーサーが存在し、URLの変換方法についてそれぞれ異なる考え方を持っているということです。そこに問題があります。
URL解析の欠陥:研究者が発見したもの
Team82 と Snyk の研究者は協力して、さまざまな言語で書かれた 16 種類の URL 解析ライブラリとツールを分析しました。
- urllib (Python)
- urllib3 (Python)
- rfc3986 (Python)
- httptools (Python)
- curl ライブラリ (cURL)
- Wget
- Chrome(ブラウザ)
- ウリ (.NET)
- URL (Java)
- URI (Java)
- parse_url (PHP)
- URL (NodeJS)
- url-parse(NodeJS)
- net/url (Go)
- uri(ルビー)
- URI (Perl)
これらのパーサーを分析した結果、ほとんどの URL パーサーが予期しない動作をする 5 つのシナリオが判明しました。
- スキームの混乱、攻撃者が不正なURLスキームを使用する
- スラッシュの混乱、予期しない数のスラッシュを使用する
- バックスラッシュの混乱、つまりURLにバックスラッシュ()を入れること
- URLエンコードされたデータを含むURLに関連するURLエンコードされたデータの混乱
- スキームの混同。特定のスキーム (HTTP、HTTPS など) を使用して URL を解析します。
調査の過程で 8 つの脆弱性が特定され、それらは文書化され修正されましたが、チームによると、サポートされていないバージョンの Flask には依然としてこれらの脆弱性が残っているとのことです。警告しておきます。
URL解析攻撃を回避するためにできること
Log4j 規模で大混乱を引き起こす可能性のある脆弱性に対して、積極的に自分自身を保護することをお勧めしますが、URL パーサーの低レベルの必要性を考えると、それは簡単ではないかもしれません。
レポートの著者は、まずソフトウェアで使用されているパーサーを特定し、それらの動作の違いやサポートされるURLの種類などを理解することから始めることを推奨しています。さらに、ユーザーが入力したURLを決して信用しないでください。まず正規化と検証を行い、検証プロセスでパーサーの違いを考慮しましょう。
参照:パスワード侵害:ポップカルチャーとパスワードが混ざらない理由(無料PDF)(TechRepublic)
このレポートには、解析攻撃の被害に遭う可能性を最小限に抑えるのに役立つ、URL 解析に関する一般的なベスト プラクティスのヒントもいくつか記載されています。
- URLパーサーの使用を最小限に抑えるか、全く使用しないようにする。報告書の著者は「多くの場合、これは簡単に達成できる」と述べています。
- マイクロサービスを使用する場合は、フロントエンドで URL を解析し、解析された情報を環境間で送信します。
- アプリケーションのビジネスロジックに関わるパーサーは、多くの場合、異なる動作をします。これらの違いを理解し、それが他のシステムにどのような影響を与えるかを理解しましょう。
- 解析前に正規化します。これにより、悪意のあるURLが存在しても、既知の信頼できるURLがパーサーなどに転送されます。