CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

admin 2025年1月12日21:43:53评论5 views字数 1382阅读4分36秒阅读模式

★且听安全-点关注,不迷路!

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

★漏洞空间站-优质漏洞资源和小伙伴聚集地!

漏洞信息

接上文:

CVE-2022-31626 PHP远程命令执行漏洞成因分析与复现

XCyber,公众号:且听安全CVE-2022-31626 PHP远程命令执行漏洞成因分析与复现

PHP 同时还通报了另一个高危漏洞信息,编号为 CVE-2022-31625:

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

在 `PHP_FUNCTION` 中分配在堆上的 `char*` 数组没有被清除,如果发生转换错误,将会调用 `_php_pgsql_free_params` 函数,由于数组没有初始化,导致可以释放之前请求的值,导致远程代码执行。漏洞影响版本:

  •  5.3.0 <= PHP 5.x <= 5.6.40

  •  7.0.1 <= PHP 7.x < 7.4.30

  •  8.0.0 <= PHP 8.0.x < 8.0.20

  •  8.1.0 <= PHP 8.1.x < 8.1.7

漏洞成因

在 `PHP_FUNCTION` 中,利用 `safe_emalloc` 申请指针数组 `params` ,但是没有进行初始化,导致 `params` 数组中包含有内存中残留的数据或指针。如果发生异常,代码会执行 `_php_pgsql_free_params` 函数对整个指针数组进行释放:

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

在 `_php_pgsql_free_params` 函数中,根据数组中元素的总数量 `num_params` 逐个释放非 0 的指针,但是这个指针可能尚未被未初始化,因此导致非预期的内存释放:

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

这是典型的内存未初始化漏洞,如果攻击者能够控制未初始化的内存内容,可以实现任意内存释放,进而实现释放后再引用  UAF ,最终实现远程代码执行。在最新的 PHP 版本中,已经对该漏洞进行修复,将原来的总数 `num_params` 改为了当前计数值 `i` ,以此来保证所有释放的指针都是初始化过的:

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

漏洞复现

修改 `php.ini`,启用 `pgsql` 扩展:

extension=pgsql

postgres 数据库安装:

sudo apt install postgresql postgresql-contribsudo /etc/init.d/postgresql start

postgres 配置密码并允许网络访问。重启服务:

sudo /etc/init.d/postgresql restartsudo /etc/init.d/postgresql status

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

利用 POC ( `test.php` )触发漏洞,可以看到 `efree` 释放了一个错误地址导致进程崩溃:

php.exe -f test.php

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

修复方式

该内存未初始化漏洞,容易转化成 UAF 漏洞,利用难度比 CVE-2022-31626 要简单。通过远程堆风水极有可能实现任意内存释放,进而通过 UAF 实现远程代码执行。受影响客户需要尽快做好补丁升级和防护。

目前官方已发布修复版本,用户可升级至以下安全版本:

  •  PHP 8.1.7

  •  PHP 8.0.20

  •  PHP 7.4.30

有兴趣学习交流漏洞知识的小伙伴,请加入我们的漏洞空间站-致力于打造优质漏洞资源和小伙伴聚集地!

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。

★且听安全-点关注,不迷路!

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

★漏洞空间站-优质漏洞资源和小伙伴聚集地!

CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

原文始发于微信公众号(且听安全):CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月12日21:43:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2022-31625 PHP内存未初始化导致RCE漏洞成因分析和复现https://cn-sec.com/archives/1110325.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息