6 見つかった項目
脆弱性
Abstract
プログラムは AWT/Swing を使用しているので、Enterprise JavaBeans 仕様に違反しています。
Explanation
Enterprise JavaBeans 仕様に従い、bean を提供する場合は、bean が移植性を持ち、あらゆる EJB コンテナで整合性のある動作をするように作成された一連のプログラミングガイドラインに従う必要があります [1]。

この場合、プログラムは次の EJB ガイドラインに違反しています。

「enterprise bean は、情報を画面に出力する、またはキーボードから情報を入力するために、AWT 機能を使用してはなりません。」

この仕様が正当化される要件は次のとおりです。

「サーバーは、アプリケーションとサーバーに接続されたキーボード/ディスプレイとの直接相互作用を許可しません。」
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 575
desc.structural.java.ejb_bad_practices_use_of_awt_swing
Abstract
プログラムはクラスローダーを使用しているので、Enterprise JavaBeans 仕様に違反しています。
Explanation
Enterprise JavaBeans 仕様に従い、bean を提供する場合は、bean が移植性を持ち、あらゆる EJB コンテナで整合性のある動作をするように作成された一連のプログラミングガイドラインに従う必要があります [1]。

この場合、プログラムは次の EJB ガイドラインに違反しています。

「enterprise bean はクラス ローダーの作成、コンテキスト クラス ローダーの設定、セキュリティ マネージャの設定、新規セキュリティ マネージャの作成、JVM の停止、または入力、出力、エラー ストリームの変更を行ってはなりません。」

この仕様が正当化される要件は次のとおりです。

「これらの関数は Enterprise Beans コンテナー専用です。enterprise bean にこれらの関数の使用を許可すると、セキュリティを危険にさらすだけでなく、ランタイム環境を適切に管理するコンテナーの能力が低減するおそれがあります。」
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 578
desc.structural.java.ejb_bad_practices_use_of_classloader
Abstract
プログラムは java.io パッケージを使用しているので、Enterprise JavaBeans 仕様に違反しています。
Explanation
Enterprise JavaBeans 仕様に従い、bean を提供する場合は、bean が移植性を持ち、あらゆる EJB コンテナで整合性のある動作をするように作成された一連のプログラミングガイドラインに従う必要があります [1]。

この場合、プログラムは次の EJB ガイドラインに違反しています。

「enterprise bean は、Java I/O パッケージを使用して File System 内のファイルとディレクトリにアクセスする際には注意が必要です。」

この仕様が正当化される要件は次のとおりです。

「File System API はデータ アクセスを行うための業務コンポーネントに適していません。ファイルがすべてのインスタンスからアクセスできない場合や、インスタンスごとにコンテンツが異なる場合があり、ファイルの更新を調整することが困難になる可能性があります。業務コンポーネントには、データを格納するために JDBC などのリソース マネージャ API を使用してください。」
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 576
desc.structural.java.ejb_bad_practices_use_of_java_io
Abstract
プログラムはソケットを使用しているので、Enterprise JavaBeans 仕様に違反しています。
Explanation
Enterprise JavaBeans 仕様に従い、bean を提供する場合は、bean が移植性を持ち、あらゆる EJB コンテナで整合性のある動作をするように作成された一連のプログラミングガイドラインに従う必要があります [1]。

この場合、プログラムは次の EJB ガイドラインに違反しています。

「enterprise bean は、ソケットで接続リクエストを行う、ソケットで接続を確立する、またはソケットをマルチキャストに使用してはなりません。」

この仕様が正当化される要件は次のとおりです。

「Enterprise Beans アーキテクチャにより、enterprise bean インスタンスはネットワーク ソケット クライアントにすることができますが、ネットワーク サーバーにすることはできません。インスタンスをネットワーク サーバーにすることを許可すると、Enterprise Beans クライアントに使用される enterprise bean の基本関数に抵触します。」
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 577
desc.structural.java.ejb_bad_practices_use_of_sockets
Abstract
プログラムはスレッド同期プリミティブを使用して Enterprise JavaBeans 仕様に違反しています。
Explanation
Enterprise JavaBeans 仕様に従い、bean を提供する場合は、bean が移植性を持ち、あらゆる EJB コンテナで整合性のある動作をするように作成された一連のプログラミングガイドラインに従う必要があります [1]。

この場合、プログラムは次の EJB ガイドラインに違反しています。

「bean 管理同時性を備えたシングルトン セッション bean でない限り、enterprise bean は複数のインスタンスの実行を同期させるために、スレッド同期プリミティブを使用してはなりません。」

この仕様が正当化される要件は次のとおりです。

「Enterprise Bean コンテナの中には単一の JVM を使用してすべての Enterprise Bean のインスタンスを実行するものもあれば、複数の JVM にインスタンスを配布するものもあるため、このルールでランタイムのセマンティクスを確実に一定に保つ必要があります。」
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] THI01-J. Do not invoke ThreadGroup methods CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 574
desc.structural.java.ejb_bad_practices_use_of_synchronization_primitives
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1. 信頼できないソースからデータがプログラムに入り込んだ場合。


2. データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次の C# コードは JSON.NET を使用して、ユーザー制御入力変数 username および password から C:\user_info.json にある JSON ファイルに、権限を与えられていないユーザー (「default」ロールのユーザーです。これに対し権限が付与されたユーザーのロールは「admin」です) のユーザー アカウントの認証情報をシリアライズします。


...

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);

using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;

writer.WriteStartObject();

writer.WritePropertyName("role");
writer.WriteRawValue("\"default\"");

writer.WritePropertyName("username");
writer.WriteRawValue("\"" + username + "\"");

writer.WritePropertyName("password");
writer.WriteRawValue("\"" + password + "\"");

writer.WriteEndObject();
}

File.WriteAllText(@"C:\user_info.json", sb.ToString());


ただし、JSON シリアライゼーションが JsonWriter.WriteRawValue() を使用して実行されるため、username および password 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限を与えられていないユーザー mallory (パスワード Evil123!) が username 変数の値を設定するプロンプトでユーザー名を入力するときに自身のユーザー名に ","role":"admin を追加する場合、結果として C:\user_info.json に保存される JSON は次のようになります。


{
"role":"default",
"username":"mallory",
"role":"admin",
"password":"Evil123!"
}


このシリアライズされた JSON ファイルがその後 JsonConvert.DeserializeObject() を使用して Dictionary オブジェクトにデシリアライズされた場合はこのようになります。


String jsonString = File.ReadAllText(@"C:\user_info.json");

Dictionary<string, string> userInfo = JsonConvert.DeserializeObject<Dictionary<string, strin>>(jsonString);
Dictionary オブジェクト内で usernamepassword、および role キーの結果として得られる値はそれぞれ malloryEvil123!、および admin になります。デシリアライズされた JSON 値が有効かについてこれ以上検証しないと、アプリケーションは誤ってユーザー mallory に「admin」権限を割り当てます。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.dotnet.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1.信頼できないソースからデータがプログラムに入力された場合。


2.データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報を送信する可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次のコードは、ユーザー制御入力変数 username および password から ~/user_info.json にある JSON ファイルに、権限を与えられていないユーザー (「default」ロールのユーザーです。これに対し権限が付与されたユーザーのロールは「admin」です) のユーザー アカウントの認証情報をシリアライズします。


...
func someHandler(w http.ResponseWriter, r *http.Request){
r.parseForm()
username := r.FormValue("username")
password := r.FormValue("password")
...
jsonString := `{
"username":"` + username + `",
"role":"default"
"password":"` + password + `",
}`
...
f, err := os.Create("~/user_info.json")
defer f.Close()

jsonEncoder := json.NewEncoder(f)
jsonEncoder.Encode(jsonString)
}


ただし、JSON シリアライゼーションが文字列連結を使用して実行されるため、username および password 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限を与えられていないユーザー mallory (パスワード Evil123!) がユーザー名を入力するときに ","role":"admin を追加する場合、結果として ~/user_info.json に保存される JSON は次のようになります。


{
"username":"mallory",
"role":"default",
"password":"Evil123!",
"role":"admin"
}

デシリアライズされた JSON 値が有効かどうかこれ以上検証しないと、アプリケーションは意図せずユーザー mallory に「admin」権限を割り当てます。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.golang.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1. 信頼できないソースからデータがプログラムに入り込んだ場合。


2. データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次の Java コードは Jackson を使用して、ユーザー制御入力変数 username および password から ~/user_info.json にある JSON ファイルに、権限を与えられていないユーザー (「default」ロールのユーザーです。これに対し権限が付与されたユーザーのロールは「admin」です) のユーザー アカウントの認証情報をシリアライズします。


...

JsonFactory jfactory = new JsonFactory();

JsonGenerator jGenerator = jfactory.createJsonGenerator(new File("~/user_info.json"), JsonEncoding.UTF8);

jGenerator.writeStartObject();

jGenerator.writeFieldName("username");
jGenerator.writeRawValue("\"" + username + "\"");

jGenerator.writeFieldName("password");
jGenerator.writeRawValue("\"" + password + "\"");

jGenerator.writeFieldName("role");
jGenerator.writeRawValue("\"default\"");

jGenerator.writeEndObject();

jGenerator.close();


ただし、JSON シリアライゼーションが JsonGenerator.writeRawValue() を使用して実行されるため、username および password 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限を与えられていないユーザー mallory (パスワード Evil123!) が username 変数の値を設定するプロンプトでユーザー名を入力するときに自身のユーザー名に ","role":"admin を追加する場合、結果として ~/user_info.json に保存される JSON は次のようになります。


{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}


このシリアライズされた JSON ファイルがその後 JsonParser を使用して HashMap オブジェクトにデシリアライズされた場合はこのようになります。


JsonParser jParser = jfactory.createJsonParser(new File("~/user_info.json"));

while (jParser.nextToken() != JsonToken.END_OBJECT) {

String fieldname = jParser.getCurrentName();

if ("username".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}

if ("password".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}

if ("role".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}

if (userInfo.size() == 3)
break;
}

jParser.close();
HashMap オブジェクト内で usernamepassword、および role キーの結果として得られる値はそれぞれ malloryEvil123!、および admin になります。デシリアライズされた JSON 値が有効かについてこれ以上検証しないと、アプリケーションは誤ってユーザー mallory に「admin」権限を割り当てます。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.java.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1. 信頼できないソースからデータがプログラムに入り込んだ場合。


2. データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次の JavaScript コードでは、jQuery を使用して URL から値を受け取る JSON をパースしています。


var str = document.URL;
var url_check = str.indexOf('name=');
var name = null;
if (url_check > -1) {
name = decodeURIComponent(str.substring((url_check+5), str.length));
}

$(document).ready(function(){
if (name !== null){
var obj = jQuery.parseJSON('{"role": "user", "name" : "' + name + '"}');
...
}
...
});


ここで、name で信頼されていないデータは検証されずに JSON 関連の特殊文字がエスケープされません。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限のないユーザー mallory が URL の名前パラメーターに ","role":"admin を追加すると、JSON は次のようになります。


{
"role":"user",
"username":"mallory",
"role":"admin"
}


これは jQuery.parseJSON() によってパースされてプレーン オブジェクトに設定されます。つまり、obj.role は "user" の代わりに "admin" を返すようになります。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.javascript.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1. 信頼できないソースからデータがプログラムに入り込んだ場合。


2. データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次の Objective-C コードは、ユーザー制御が可能なフィールド _usernameField および _passwordField から JSON に、権限を与えられていないユーザー (「default」ロールのユーザーです。これに対し権限が付与されたユーザーのロールは「admin」です) のユーザー アカウントの認証情報をシリアライズします。


...

NSString * const jsonString = [NSString stringWithFormat: @"{\"username\":\"%@\",\"password\":\"%@\",\"role\":\"default\"}" _usernameField.text, _passwordField.text];


ただし、JSON シリアライゼーションが NSString.stringWithFormat: を使用して実行されるため、_usernameField および _passwordField 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限を与えられていないユーザー mallory (パスワード Evil123!) がユーザー名を _usernameField フィールドに入力するときに自身のユーザー名に ","role":"admin を追加する場合、結果として JSON は次のようになります。


{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}


このシリアライズされた JSON 文字列がその後 NSJSONSerialization.JSONObjectWithData: を使用して NSDictionary オブジェクトにデシリアライズされた場合はこのようになります。


NSError *error;
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];
NSDictionary オブジェクト内で usernamepassword、および role キーの結果として得られる値はそれぞれ malloryEvil123!、および admin になります。デシリアライズされた JSON 値が有効かについてこれ以上検証しないと、アプリケーションは誤ってユーザー mallory に「admin」権限を割り当てます。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.objc.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSON Injection が発生します。

1.信頼できないソースからデータがプログラムに入力された場合。


2.データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが未検証の入力から JSON を構築すると、JSON ドキュメントとメッセージのセマンティクスは変更される可能性があります。深刻でないとしても、攻撃者が余分な要素を挿入し、JSON ドキュメントまたはリクエストを解析中に、アプリケーションに例外をスローさせる可能性があります。深刻なケース (JSON Injection が伴う場合など) としては、攻撃者が、JSON ドキュメントまたはリクエスト内に、ビジネス上不可欠な値の予測可能な操作を許可する余分な要素を挿入することがあります。また、JSON Injection が Cross-Site Scripting や Dynamic Code Evaluation を引き起こす場合があります。

例 1: 次の Python コードは、URL から取得された、信頼できない値で json ファイルを更新します。


import json
import requests
from urllib.parse import urlparse
from urllib.parse import parse_qs

url = 'https://www.example.com/some_path?name=some_value'
parsed_url = urlparse(url)
untrusted_values = parse_qs(parsed_url.query)['name'][0]

with open('data.json', 'r') as json_File:
data = json.load(json_File)

data['name']= untrusted_values

with open('data.json', 'w') as json_File:
json.dump(data, json_File)

...
name 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが JSON キーを随意に挿入できるようになり、シリアライズされた JSON の構造を変更する可能性があります。この例では、権限を与えられていないユーザー mallory が URL の名前パラメータに ","role":"admin を追加する場合、JSON は次のようになります。


{
"role":"user",
"username":"mallory",
"role":"admin"
}

これで、JSON ファイルは悪意のあるデータで改ざんされ、ユーザーは "user" ではなく "admin" の特権付きアクセス権を使用できるようになりました
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.python.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1.信頼できないソースからデータがプログラムに入り込んだ場合。


2.データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.scala.json_injection
Abstract
このメソッドは未検証の入力を JSON に書き込みます。この呼び出しにより、攻撃者は任意の要素や属性を JSON エンティティに挿入する可能性があります。
Explanation
次の場合に JSO Injection が発生します。

1. 信頼できないソースからデータがプログラムに入り込んだ場合。


2. データが JSON ストリームに書き込まれた場合。

アプリケーションは、通常、JSON を使用してデータを保存したりメッセージを送信したりします。データの保存に使用される場合、JSON はキャッシュ保存されたデータのように扱われ、重要な情報が含まれる場合があります。メッセージの送信に使用される場合、JSON は多くの場合 RESTful サービスと一緒に使用され、認証情報のような機密情報の送信に使用される可能性があります。

アプリケーションが検証されていない入力から JSON を構成する場合、JSON 文書およびメッセージのセマンティクスが改変される場合があります。比較的良性の場合、攻撃者は、JSON 文書またはリクエストをパース中にアプリケーションに例外をスローさせる、余分な要素を挿入できるようになることがあります。JSON Injection を含むなど、より深刻な場合、攻撃者は、JSON 文書またはリクエスト内でビジネスに不可欠な値の予測可能な操作を許可する、余分な要素を挿入できるようになることがあります。また、JSON Injection により、Cross-Site Scripting や Dynamic Code Evaluation が引き起こされる場合もあります。

例 1: 次の Swift コードは、ユーザー制御が可能なフィールド usernameField および passwordField から JSON に、権限を与えられていないユーザー (「default」ロールのユーザーです。これに対し権限が付与されたユーザーのロールは「admin」です) のユーザー アカウントの認証情報をシリアライズします。


...
let jsonString : String = "{\"username\":\"\(usernameField.text)\",\"password\":\"\(passwordField.text)\",\"role\":\"default\"}"


ただし、JSON シリアライゼーションが文字列補間を使用して実行されるため、usernameField および passwordField 内の信頼できないデータに対して、JSON 関連の特殊文字をエスケープするための検証がされなくなります。これにより、ユーザーが、シリアライズされた JSON の構造を変更する可能性がある JSON キーを随意に挿入できるようになります。この例では、権限を与えられていないユーザー mallory (パスワード Evil123!) がユーザー名を usernameField フィールドに入力するときに自身のユーザー名に ","role":"admin を追加する場合、結果として JSON は次のようになります。


{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}


このシリアライズされた JSON 文字列がその後 NSJSONSerialization.JSONObjectWithData: を使用して NSDictionary オブジェクトにデシリアライズされた場合はこのようになります。


var error: NSError?
var jsonData : NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonString.dataUsingEncoding(NSUTF8StringEncoding), options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
NSDictionary オブジェクト内で usernamepassword、および role キーの結果として得られる値はそれぞれ malloryEvil123!、および admin になります。デシリアライズされた JSON 値が有効かについてこれ以上検証しないと、アプリケーションは誤ってユーザー mallory に「admin」権限を割り当てます。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 91
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[7] Standards Mapping - OWASP API 2023 API1 Broken Object Level Authorization
[8] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - OWASP Top 10 2017 A1 Injection
[16] Standards Mapping - OWASP Top 10 2021 A03 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.swift.json_injection