使用Chatgpt发现JPEG2000 编码漏洞
2023-3-22 20:20:47 Author: 渗透安全团队(查看原文) 阅读量:50 收藏

现在只对常读和星标的公众号才展示大图推送,建议大家能把渗透安全团队设为星标”,否则可能就看不到了啦

使用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
}


付费圈子

(目前进度1153/1166)

价格只会上涨,不会下跌
如果你觉得应该加入,就不要犹豫

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


群聊 | 技术交流群-群除我佬

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247501587&idx=3&sn=0c701460ab1c58b23a3d8ac7496577fc&chksm=c1763abcf601b3aa6662100d49527939c6610196aae08143c5338a93b7af3da340cc11d95d00#rd
如有侵权请联系:admin#unsafe.sh