脆弱性の発見者:Cory Duplantis(Talos)
Talos は、Ansible Vault と Tablib の Yet Another Markup Language(YAML)コンテンツ処理方法に起因する脆弱性を発見しました。この脆弱性により、リモートでコードが実行される危険性があります。悪意のある YAML コンテンツにより脆弱性がエクスプロイトされると、攻撃者により任意のコマンドが実行される危険性があります。
概要
YAML は、人間が読み取れると同時にマシンでも簡単に解析できるよう設計された、データ シリアル化マークアップ形式です。YAML データを解析するために、これまで多様なツールやライブラリが開発されてきました。Python の YAML 解析ライブラリ PyYAML では、YAML データを解析する 2 つの API コール(yaml.load と yaml.safe_load)が提供されています。以前の API では YAML 入力が適切にサニタイズされず、攻撃者が YAML コンテンツ内に Python コードを埋め込んで実行できました。
PyYAML ライブラリが含まれているアプリケーションで、yaml.safe_load ではなく yaml.load を呼び出すと、リモートでコードが実行される脆弱性が発現します。
TALOS-2017-0305:Ansible-Vault ライブラリにおいて、リモートでコードが実行される脆弱性(CVE-2017-2809)
Ansible は、IT およびネットワーク ベースのタスクを簡単に自動化できるソリューションです。使いやすさを考慮して、これらのタスクは YAML で記述されています。Ansible-Vault は、Ansible Vault ファイルを表示・変更するためのサードパーティ製 Python ライブラリです。このライブラリには、暗号化された Vault ファイルの表示に関連する脆弱性が存在します。暗号化された YAML コードをロードする際、安全でない API コールである yaml.load が呼び出されます。この脆弱性により、攻撃者は、現行ユーザのコンテキストでコードをリモート実行できます。
問題のライブラリは、Ansible が提供する Ansible Vault のコア機能とは切り離されており、こちらは脆弱性の影響を受けません。
技術的な詳細情報については、次の Talos 脆弱性レポートを参照してください。
TALOS-2017-0307:Tablib においてリモートでコードが実行される脆弱性(CVE-2017-2810)
Tablib は Python のデータセット ライブラリであり、プログラムによる表形式のデータ ファイルへのアクセス、書き込み、管理が簡単にできます。Tablib 自体は、django-import-export を含む多数のアプリケーションで広範に使用されています。
Tablib のデータブック機能には、安全でない API コールである yaml.load の呼び出しも含まれています。そのため、ユーザが提供した YAML コードを正しくサニタイズできません。このため攻撃者は、データブック内の YAML コードに任意のコードを埋め込むことで、現行ユーザのコンテキストで実行できます。
技術的な詳細情報については、次の Talos 脆弱性レポートを参照してください。
カバレッジ
今回の脆弱性をエクスプロイトする試みは、以下の Snort ルールにより検出できます。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、Firepower Management Center、FireSIGHT Management Center、または Snort.org を参照してください。
Snort ルール:42195 ~ 42196
TALOS-2017-0305 では、Dylan Ayrey の協力に謝意を表します。
本稿は 2017年9月14日に Talos Group のブログに投稿された「Vulnerability Spotlight: YAML Parsing Remote Code Execution Vulnerabilities in Ansible Vault and Tablib」の抄訳です。