
このプロジェクトには、CVE-2022-25845 の影響を受ける fastjson 依存関係が含まれています。
この脆弱性は、JSON内のマークアップがJava Beanとして解釈されることで発生します。つまり、クラスがインスタンス化され、セッターメソッドの実行によってプロパティが設定されます。これはリフレクションを使用して行われます。セッターがコード実行などの動作をトリガーできるクラスがクラスパスに存在する場合(例では、そのクラスは Trigger、対応する入力は CVE-2022-25845.json です)、この脆弱性を悪用できる可能性があります。
ここで興味深いのは、リフレクションの使用です。これは、脆弱性を実証するために含まれているテストを実行した際の以下のスタックトレースに示されています。
setName:11, Trigger
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect) [2]
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:566, Method (java.lang.reflect)
setValue:167, FieldDeserializer (com.alibaba.fastjson.parser.deserializer)
deserialze:155, ThrowableDeserializer (com.alibaba.fastjson.parser.deserializer)
parseObject:405, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:1430, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:1390, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:181, JSON (com.alibaba.fastjson)
parse:191, JSON (com.alibaba.fastjson)
parse:147, JSON (com.alibaba.fastjson)
main:18, CheckJSON (scabench)
confirmCVE202225845:39, ConfirmVulnerabilitiesTests (scabench)
標準的なメタデータベースのSCAは、この脆弱性を問題なく特定できます。これは「通常業務」です。しかし、コールグラフベースのツールは、コールグラフの構築が一般にリフレクティブコールをモデル化できないため、これを見逃す可能性があります。この意味で、これは使用される分析によって、真陽性かつ偽陰性の両方となります。
この脆弱性を実証するための proof-of-vulnerability テストがあることに注意してください。このテスト(したがって mvn test によるビルド)は失敗します。テストの仕組みについては、https://github.com/scabench/jsonorg-tp1 を参照してください。
さまざまな分析を実行するための複数のshスクリプトがあります。結果レポートは scan-results にあります。
pom.xml には、CycloneDX 形式の SBOM を生成するプラグインがあります。これを行うには、mvn cyclonedx:makePackageBom を実行します。SBOM は target/ に json 形式と xml 形式であります。