使用Chatgpt发现JPEG2000 编码漏洞

admin 2023年3月22日02:11:54评论66 views字数 2250阅读7分30秒阅读模式

使用Chatgpt发现JPEG2000 编码漏洞

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

现在只对常读和星标的公众号才展示大图推送,建议大家能把迪哥讲事(growing0101)“设为星标”,否则可能就看不到了啦!


现在只对常读和星标的公众号才展示大图推送,建议大家能把迪哥讲事(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
}


福利视频

笔者自己录制的一套php视频教程(适合0基础的),感兴趣的童鞋可以看看,目前还没有录制完成,基础视频总共约200多集,目前已经录制了一百多集

https://space.bilibili.com/177546377/channel/seriesdetail?sid=2949374

技术交流

技术交流请加笔者微信:richardo1o1 (暗号:growing)

往期回顾

2022年度精选文章

dom-xss研究系列


原文始发于微信公众号(迪哥讲事):使用Chatgpt发现JPEG2000 编码漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月22日02:11:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Chatgpt发现JPEG2000 编码漏洞https://cn-sec.com/archives/1620334.html

发表评论

匿名网友 填写信息