セキュア・コーディング・テクニック。XMLデータの処理、パート1

2017年12月10日発行
ピーテル・デ・クレマー著
ケーススタディ

セキュア・コーディング・テクニック。XMLデータの処理、パート1

2017年12月10日発行
ピーテル・デ・クレマー著
リソースを見る
リソースを見る

XML(Extensible Markup Language)は、機械にとって扱いやすく、人間にとっても読みやすいフォーマットで文書を符号化するためのマークアップ言語です。しかし、一般的に使用されているこのフォーマットには、複数のセキュリティ上の欠陥があります。XML関連のブログ記事の第1回目となる今回は、スキーマを使ってXML文書を安全に取り扱うための基礎知識を説明します。

OWASP は、XML および XML スキーマに関連するさまざまな脆弱性を 2 つのカテゴリに分けています。

不正なXML文書

不正なXML文書とは、W3CのXML仕様に準拠していない文書のことである。不正なドキュメントになる例としては、終了タグの削除、異なる要素の順序の変更、禁止された文字の使用などがあります。これらのエラーはすべて致命的なエラーとなり、ドキュメントは追加の処理を受けるべきではありません。

不正な文書に起因する脆弱性を回避するためには、W3Cの仕様に準拠し、不正な文書の処理に著しく時間がかからない、十分にテストされたXMLパーサーを使用する必要があります。

無効なXML文書

無効なXML文書は、うまく形成されているものの、予期しない値を含んでいます。ここで、攻撃者は、文書が有効であるかどうかを識別するためのXMLスキーマを適切に定義していないアプリケーションを利用することができます。以下に、正しく検証されなかった場合に意図しない結果をもたらす可能性のある文書の簡単な例を示します。

トランザクションをXMLデータで保存するウェブストアです。

   <purchase></purchase>
     <id>123</id>
     <price>200</price>
   

And the user only has control over the <id> value. It is then possible, without the right counter measures, for an attacker to input something like this:</id>

   <purchase></purchase>
     <id>123</id>
     <price>0</price>
     <id></id>
     <price>200</price>
   

If the parser that processes this document only reads the first instance of the <id> and <price> tags this will lead to unwanted results. </price></id>

また、スキーマの制限が不十分であったり、他の入力検証が不十分であったりして、負の数や特殊な小数(NaNやInfinityなど)、あるいは非常に大きな値が想定外の場所に入力されてしまい、同様の意図しない動作が発生することもあります。

不正なXML文書に関する脆弱性を回避するには、正確で制限のあるXMLスキーマを定義して、不適切なデータ検証による問題を回避する必要があります。

次回のブログ記事では、ジャンボ・ペイロードや、OWASPトップテンの第4位であるXXEなど、XML文書に対するより高度な攻撃を紹介します。

それまでの間、私たちのポータルで、XML入力検証のスキルを磨いたり、挑戦したりすることができます。

XMLおよびXMLスキーマの仕様には、複数のセキュリティ上の欠陥が含まれています。同時に、これらの仕様は、XMLアプリケーションを保護するために必要なツールを提供しています。XML文書のセキュリティを定義するためにXMLスキーマを使用しているにもかかわらず、ファイル検索、サーバサイドリクエストフォージェリ、ポートスキャン、ブルートフォースなど、さまざまな攻撃を行うために使用することができます。

https://www.owasp.org/index.php/XML_Security_Cheat_Sheet

リソースを見る
リソースを見る

著者

ピーテル・デ・クレマー

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

セキュア・コーディング・テクニック。XMLデータの処理、パート1

2017年12月10日発行
Pieter De Cremer 著

XML(Extensible Markup Language)は、機械にとって扱いやすく、人間にとっても読みやすいフォーマットで文書を符号化するためのマークアップ言語です。しかし、一般的に使用されているこのフォーマットには、複数のセキュリティ上の欠陥があります。XML関連のブログ記事の第1回目となる今回は、スキーマを使ってXML文書を安全に取り扱うための基礎知識を説明します。

OWASP は、XML および XML スキーマに関連するさまざまな脆弱性を 2 つのカテゴリに分けています。

不正なXML文書

不正なXML文書とは、W3CのXML仕様に準拠していない文書のことである。不正なドキュメントになる例としては、終了タグの削除、異なる要素の順序の変更、禁止された文字の使用などがあります。これらのエラーはすべて致命的なエラーとなり、ドキュメントは追加の処理を受けるべきではありません。

不正な文書に起因する脆弱性を回避するためには、W3Cの仕様に準拠し、不正な文書の処理に著しく時間がかからない、十分にテストされたXMLパーサーを使用する必要があります。

無効なXML文書

無効なXML文書は、うまく形成されているものの、予期しない値を含んでいます。ここで、攻撃者は、文書が有効であるかどうかを識別するためのXMLスキーマを適切に定義していないアプリケーションを利用することができます。以下に、正しく検証されなかった場合に意図しない結果をもたらす可能性のある文書の簡単な例を示します。

トランザクションをXMLデータで保存するウェブストアです。

   <purchase></purchase>
     <id>123</id>
     <price>200</price>
   

And the user only has control over the <id> value. It is then possible, without the right counter measures, for an attacker to input something like this:</id>

   <purchase></purchase>
     <id>123</id>
     <price>0</price>
     <id></id>
     <price>200</price>
   

If the parser that processes this document only reads the first instance of the <id> and <price> tags this will lead to unwanted results. </price></id>

また、スキーマの制限が不十分であったり、他の入力検証が不十分であったりして、負の数や特殊な小数(NaNやInfinityなど)、あるいは非常に大きな値が想定外の場所に入力されてしまい、同様の意図しない動作が発生することもあります。

不正なXML文書に関する脆弱性を回避するには、正確で制限のあるXMLスキーマを定義して、不適切なデータ検証による問題を回避する必要があります。

次回のブログ記事では、ジャンボ・ペイロードや、OWASPトップテンの第4位であるXXEなど、XML文書に対するより高度な攻撃を紹介します。

それまでの間、私たちのポータルで、XML入力検証のスキルを磨いたり、挑戦したりすることができます。

XMLおよびXMLスキーマの仕様には、複数のセキュリティ上の欠陥が含まれています。同時に、これらの仕様は、XMLアプリケーションを保護するために必要なツールを提供しています。XML文書のセキュリティを定義するためにXMLスキーマを使用しているにもかかわらず、ファイル検索、サーバサイドリクエストフォージェリ、ポートスキャン、ブルートフォースなど、さまざまな攻撃を行うために使用することができます。

https://www.owasp.org/index.php/XML_Security_Cheat_Sheet

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。