freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

【缺陷周话】第21期:数据库访问控制
奇安信代码卫士 2019-02-11 15:54:07 454701

代码审计是使用静态分析发现源代码中安全缺陷的方法,能够辅助开发或测试人员在软件上线前较为全面地了解其安全问题,防患于未然,因此一直以来都是学术界和产业界研究的热点,并且已经成为安全开发生命周期 SDL 和 DevSecOps 等保障体系的重要技术手段。

360代码卫士团队基于自主研发的国内首款源代码安全检测商用工具,以及十余年漏洞技术研究的积累,推出“缺陷周话”系列栏目。每周针对 CWE、OWASP 等标准中的一类缺陷,结合实例和工具使用进行详细介绍,旨在为广大开发和安全人员提供代码审计的基础性标准化教程。

1、数据库访问控制

数据库访问控制是指程序未进行恰当的访问控制,执行了一个包含用户控制主键的SQL语句,由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能。如果在一个应用中,用户能够访问他本身无权访问的功能或者资源,就说明该应用存在访问控制缺陷,也就存在越权漏洞。本篇文章以JAVA语言源代码为例,分析数据库访问控制漏洞产生的原因以及修复方法。详见CWE ID566: Authorization Bypass Through User-Controlled SQL Primary Key (http://cwe.mitre.org/data/definitions/566.html)。

2、 数据库访问控制的危害

数据库访问控制是利用用户引入的参数生成由用户控制主键的 SQL 语句,令攻击者可以访问到同级别用户的资源或者访问更高级别用户的资源,会导致任意用户敏感信息泄露、用户信息被恶意修改或删除。数据库访问控制类似于数据库越权。例如某一页面服务器端响应中返回登录名、登录密码、手机号、身份证等敏感信息,如果存在数据库访问控制,通过对用户 ID 的遍历,就可以查看所有用户的敏感信息,这也是一种变相的脱库,而且很难被防火墙发现,因为这和正常的访问请求没有什么区别,也不会包含特殊字符,具有十足的隐秘性。

3、示例代码

本章节中使用的示例代码来源于 Samate Juliet Test Suite for Java v1.3  (https://samate.nist.gov/SARD/testsuite.php), 源文件名:CWE566_Authorization_Bypass_Through_SQL_Primary__Servlet_01.java。


3.1缺陷代码

21-3-1代码.png

上述示例代码31-56行,程序获取用户输入的参数 id,并将传入参数转成 int 类型,然后创建数据库查询,查询 uid 为传入参数 id 的清单数据。显然,程序中未对传入参数做校验及过滤,用户可随意获得任何用户的清单数据。

使用360代码卫士对上述示例代码进行检测,可以检出“数据库访问控制”缺陷,显示等级为中。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第53行报出缺陷,如图1所示:

21-3-1图.png

图1:数据库访问控制的检测示例


3.2 修复代码

21-3-2代码.png

在上述修复代码中,在第34行从 session 中直接获取到  id 的值构造查询语句,获得当前用户的清单数据,避免用户操控 SQL 语句的主键值。

使用360代码卫士对修复后的代码进行检测,可以看到已经不存在“数据库访问控制”缺陷。

21-3-2图.png

图2:修复后检测结果


4 、如何避免数据库访问控制

要避免数据库访问控制,需要注意以下几点:

(1)完善用户权限体系。要知道哪些数据对应哪些用户,哪些数据不应该由哪些用户操作。

(2)服务端对请求的数据和当前用户身份做校验,例如使用权限参数判断用户是否拥有执行操作的权限。

(3)对于可控参数进行严格的检查与过滤。 


关联阅读

【缺陷周话】第 20 期:无符号整数回绕

【缺陷周话】第19期:LDAP 注入

【缺陷周话】第18 期  XPath 注入

【缺陷周话】第17 期:有符号整数溢出

【缺陷周话】第 16 期 — 资源未释放:流

【缺陷周话】第 15 期 — 资源未释放:文件

【缺陷周话】第 14 期 :HTTP 响应截断

【缺陷周话】第 13期 :二次释放

【缺陷周话】第 12期 :存储型 XSS

【缺陷周话】第 11期 :释放后使用

【缺陷周话】第 10 期 :反射型 XSS

【缺陷周话】第 9 期 :缓冲区下溢

【缺陷周话】第 8 期 :路径遍历

【缺陷周话】第 7 期 :缓冲区上溢

【缺陷周话】第 6 期 :命令注入

【缺陷周话】第5期 :越界访问

【缺陷周话】第4期 :XML 外部实体注入

【缺陷周话】第3期 :内存泄漏

【缺陷周话】第 2 期 :SQL 注入

【缺陷周话】第1期 :空指针解引用

*360代码卫士团队原创出品。未经许可,禁止转载。转载请注明 “转自360代码卫士www.codesafe.cn”。


扫一扫,获取更多资讯~

qrcode_for_gh_bba053bd7494_1280.jpg


# 代码审计 # 安全缺陷分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 奇安信代码卫士 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
奇安信代码卫士
代码审计
奇安信代码卫士 LV.8
国内第一家专注于软件开发安全的产品 https://codesafe.qianxin.com
  • 275 文章数
  • 257 关注者
GitHub Actions 供应链攻击因受陷的 SpotBugs 令牌引起
2025-04-07
奇安信发布《2024中国软件供应链安全分析报告》
2024-09-09
存疑 CVE 漏洞带来无谓压力 热门开源项目开发者归档 GitHub 仓库
2024-07-05
文章目录