使用Chatgpt发现JPEG2000 编码漏洞
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
现在只对常读和星标的公众号才展示大图推送,建议大家能把迪哥讲事(growing0101)“设为星标”,否则可能就看不到了啦!
本文主要讲述如何利用ChatGPT发现JPEG2000 解码器中的安全漏洞。
代码来自于: https://github.com/SySeVR/SySeVR
这是研究论文《SySeVR:使用深度学习检测漏洞的框架》
的一部分, https://arxiv.org/abs/1807.06756
的目标是评估ChatGPT在不透露其CVE编号的情况下独立发现和分析已知漏洞的能力
向ChatGPT提供了SySeVR/Program data/NVD/下.7z
包中具体的C代码
CVE-2016-2213_VULN_jpeg2000_decode_tile.c的内容,没有提到文件名或任何CVE编号。该C代码源文件有175行,开头是:
static int jpeg2000_decode_tile(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
AVFrame *picture)
{
const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
int compno, reslevelno, bandno;
int x, y;
int planar = !!(pixdesc->flags & AV_PIX_FMT_FLAG_PLANAR);
int pixelsize = planar ? 1 : pixdesc->nb_components; uint8_t *line;
Jpeg2000T1Context t1;
/* Loop on tile components */
for (compno = 0; compno < s->ncomponents; compno++) {
Jpeg2000Component *comp = tile->comp + compno;
Jpeg2000CodingStyle *codsty = tile->codsty + compno;
t1.stride = (1<<codsty->log2_cblk_width) + 2;
共享代码后,ChatGPT 对其进行了分析,发现 jpeg2000_decode_tile() 函数中存在整数溢出漏洞。此漏洞可能会导致内存损坏、应用程序崩溃甚至任意代码执行。重要的是,ChatGPT 的分析与已知漏洞 CVE-2016-2213 一致。这是 ChatGPT 生成的内容:
t1.stride = (1<<codsty->log2_cblk_width) + 2
:在这一行中,codsty->log2_cblk_width有可能有一个大值,这可能导致左移操作导致整数溢出
为了解决这个问题,你可以在执行移位操作之前增加检查,以确保log2_cblk_width值落在可接受的范围内。
ChatGPT以NVD(国家漏洞数据库)报告的格式提供了漏洞的摘要。报告概述了此漏洞的潜在影响,包括内存损坏风险、应用程序崩溃风险以及任意执行代码的可能性。
NVD报告示例:
标题:整数溢出在JPEG2000解码器 CVE编号:[由CVE编号机构分配]
描述:已在JPEG2000解码器的jpeg2000_decode_tile()函数中识别出整数溢出漏洞。该问题源于未检查的左移操作,这可能导致计算的步幅值不正确。这可能会导致内存访问问题或其他意想不到的行为。
受影响的软件/操作系统:
影响:攻击者可能利用此漏洞导致内存损坏或应用程序崩溃,可能导致拒绝服务或执行任意代码。
ChatGPT 建议了一些详细的操作,例如:
if (codsty->log2_cblk_width >= 0 && codsty->log2_cblk_width < 32) {
t1.stride = (1 << codsty->log2_cblk_width) + 2;
} else {
// Handle the error or set a default stride value
}
★
(目前进度1153/1166)
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读