nbcio-boot3.1 は、ビルディング ブロック レポートの SSTI ベースの任意のコード実行の脆弱性を解決し、ビルディング ブロック レポートのバージョンを 1.4.0 から最新の 1.6.1 にアップグレードします。

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.エフェクト画像

おすすめ

転載: blog.csdn.net/qq_40032778/article/details/132340204