1. ビルディング ブロック レポートは、SSTI の任意のコード実行の脆弱性に基づいています。
影響を受けるバージョンの JeecgBoot では、ビルディング ブロックの report/jeecg-boot/jmreport/queryFieldBySql API インターフェイスが ID 検証を実行しないため、ユーザーから渡された SQL パラメーターの処理に FreeMarker を使用すると、不正な攻撃者が悪意のある SQL パラメーターを含む http を送信する可能性があります。 SSTIを介してアプリケーション側で任意のコードの実行を要求します。
2. pom.xml を以下の 1.6.1 に変更します。
<!-- 积木报表 -->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-spring-boot-starter</artifactId>
<version>1.6.1</version>
<exclusions>
<exclusion>
<groupId>org.jeecgframework</groupId>
<artifactId>autopoi-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
3. アップグレード後に以下の問題が発生する
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; SQL 文法が間違っています [SELECT count(0) FROM jimu_report_data_source jrds WHERE 1 = 1 AND jrds.TYPE = ?];
ネストされた例外は java.sql.SQLSyntaxErrorException です: org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) の'where 句' にある不明な列 'jrds.TYPE' (
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator )
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667 ) での .translate(AbstractFallbackSQLExceptionTranslator.java:70 )
org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)
で org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:738)
で org.springframework.jdbc.core.JdbcTemplate.query (JdbcTemplate.java:794)
で org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:243)
で org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:252)
でorg.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:268)
org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate$$FastClassBySpringCGLIB$$9d5423dc.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
で org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) で
org.springframework.aop.framework.CglibAopProxy.access で$000(CglibAopProxy.java:85)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate$$EnhancerBySpringCGLIB$$ee436ac5.queryForObject( <生成>)
org.jeecgframework.minidao.aop.MiniDaoHandler.getReturnMinidaoResult(MiniDaoHandler.java:425)
at org.jeecgframework.minidao.aop.MiniDaoHandler.invoke(MiniDaoHandler.java:133)
4. jimu_report_data_sourceテーブルにフィールドが追加されているはずですが、以下の2つのフィールドが追加されています
tenant_id varchar 10 マルチテナント ID
タイプ varchar 10 0 タイプ (レポート: レポート; ドラッグ: ダッシュボード)
5. 同時に、FreeMarker テンプレート インジェクションの脆弱性も修正します。
//update-begin-author:taoyan date:2022-8-10 for: freemarker模板注入问题 禁止解析ObjectConstructor,Execute和freemarker.template.utility.JythonRuntime。
//https://ackcent.com/in-depth-freemarker-template-injection/
_tplConfig.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);
_sqlConfig.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);
//update-end-author:taoyan date:2022-8-10 for: freemarker模板注入问题 禁止解析ObjectConstructor,Execute和freemarker.template.utility.JythonRuntime。
6.エフェクト画像