java - 需要访问 hsqldb 静态方法但得到 java.sql.SQLSyntaxErrorException: 用户缺少权限或找不到对象
问题描述
我正在尝试访问 hsqldb (2.5.1) InOutUtil 类中的反序列化静态方法。当我运行它时,java -cp hsqldb.jar:. testcode
我得到:
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: org.hsqldb.lib.InOutUtil.deserialize
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
at testcode.main(testcode.java:58)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: org.hsqldb.lib.InOutUtil.deserialize
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.result.Result.getException(Unknown Source)
... 4 more
代码:
...
connection = DriverManager.getConnection(dburl, "sa", "");
statement = connection.createStatement();
statement.execute("call \"java.lang.System.setProperty\"('org.apache.commons.collections.enableUnsafeSerialization','true')");
statement.execute("call \"org.hsqldb.lib.InOutUtil.deserialize\"('" + my_object +"');");
...
这是引发异常的违规行:
statement.execute("call \"org.hsqldb.lib.InOutUtil.deserialize\"('" + my_object +"');");
我想要做的是在 hsqldb 的本地实例上重现这个漏洞, https://github.com/Critical-Start/Team-Ares/tree/master/CVE-2020-5902 。
不知道我做错了什么。谢谢!
解决方案
您链接到的漏洞是指 HSQLDB 版本 1.8.0,该版本自 2010 年版本 2.0 发布以来已经过时。但是,安全框架的各个方面在 HyperSQL 的最新版本中保持不变。
即使具有 DBA 凭据的数据库用户也无法执行恰好位于数据库服务器类路径中的任意静态方法。
hsqldb.method_class_names
启动数据库服务器的系统管理员可以使用带有列表的 Java System 属性发出允许作为可调用过程运行的特定静态方法的允许列表。见: http: //hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_jrt_access_control然后,列出的安全静态方法只能通过 DBA 凭据转换为 SQL 可调用过程。过程的 EXECUTE 权限由 DBA 授予。
HyperSQL 2.x 版通常对旧的安全框架进行了改进,例如允许安全密码哈希算法、密码检查和保留策略,包括通过 LDAP 和其他框架进行的外部身份验证。
推荐阅读
- c# - 如何修复PDF表单在预览中显示为未填写但在打开时已填写
- stream - 定义有关流的 gRPC 元数据的最佳实践
- tomcat - Grails 4.0.3 缓存插件 - clearAtStratup 不起作用
- python - 在 python 中需要用于动态 URL 映射的 API
- arrays - 处理非法数组
- c++ - 将指针移动到使用 ASM 的指针和 mov 指令 x86 的前缀
- javascript - Websync 4 CORS 问题
- javascript - 是否可以隐藏字符串
- java - 如何设置 JAVA SSL 连接的持续时间
- angular - mat-paginator 不适用于 [隐藏]