PHP修复输入验证代码中的漏洞
聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
如果你在使用PHP,检查下是否是最新版本 8.1.3。上周,PHP 发布该版本,修复了多个内存管理不当漏洞,其中一个漏洞是 CVE-2021-21708,是函数 php_filter_float() 中的一个释放后使用漏洞。
目前,PHP 8.0和7.4 仍然受支持且易受攻击。如用户使用的并非最新的8.1 版本,则需要分别升级至 8.0.16和7.4.28 版本。
基于使用PHP查询数据库的 PoC exploit ,该漏洞可用于使 PHP 进程崩溃,很可能导致DoS 攻击。当然,和往常一样,Mozilla 在安全更新中指出,修复具有内存损坏证据的漏洞后,应该“假设某些漏洞本可被用于执行任意代码”。
远程代码执行 (RCE) 即从外部提交的数据不仅可以导致计算机上的程序崩溃,还可能在该进程中获得控制权,通常会导致网络入侵、数据提取、恶意软件植入等等。
无效的验证代码
具有讽刺意味的是,PHP 过滤函数旨在验证导入的数据,如确保有人发送的整数(如5、7、11)并非无法被可靠地转为整数(如3.14159或3/16 inch)的文本字符串。
CVE-2021-21708 是负责检查有效浮点数的代码的一部分。PHP 的数字过滤函数使用户不仅可检查导入的数据是合法的,而且还检查它位于某个特定范围如确保其不大于2.71828或介于-1和1之间。如果导入数字已经是浮点数,则如下代码所示,PHP的旧版本代码(8.1.2)位于左侧,新版本代码 (8.1.3) 位于右侧(此处无bug,因此两个版本是相似的)。不了解C语言也没关系,需要注意的点是首先完成错误检查,之后是一行代码以释放PHP当前使用的内存以存储该数字,接着立即又是一行代码为PHP重新分配内存供使用。Zval_ptr_dtor() 是PHP 内部内存指针析构函数的简称。
如果导入的数字是一个整数,没有小数点后面的部分,则所用代码应该略有不同。
如下所示,旧版本中的顺序“执行检查,如失败则推出;但如成功,则为数字取消分配并重新分配存储空间”是混合的,其顺序是“取消该PHP值使用的内存分配,然后执行检查,如失败则退出,留下的指向内存的PHP对象不久将被分配到其它地方,之后将引发释放后使用问题;但如果检查成功,则为该数字重新分配新的存储空间。”这就像先走到路上,之后才检查路面是否安全再完成过路动作。新版本代码已将检查路面是否安全放在首位,之后再上路并直接走到对面。
由Visual Studio Code 的“diff”视图展现了8.1.2版本中标记的红色部分被转移到8.1.3版本的绿色部分。
如何解决
如果你是PHP用户,则更新至8.1.3版本。如尚未更新至PHP 8.1版本,则更新至更早的两个分支版本:8.0版本需升级至8.0.16,7.4版本需升级至7.4.28版本。如使用Linux 发行版本管理PHP,则查看各发行版本获取详情。
如为程序员,则需要注意用C编写的代码要求一直注意随处的内存,因此隐藏良好的像本文提到的漏洞不会潜入。
如为程序员,则尝试编写代码时减少在你之后的编程人员带来的错误数量。
推荐阅读
PHP Everywhere 插件中存在严重RCE,影响数千个 WordPress 站点
漏洞10年深藏不露,PHP 项目依赖关系管理工具Composer安全吗?
PHP Composer 新漏洞可引发大规模供应链攻击
PHP源代码后门事件后续:用户数据库遭泄露或是元凶
详细分析PHP源代码后门事件及其供应链安全启示
原文链接
https://nakedsecurity.sophos.com/2022/02/18/irony-alert-php-fixes-security-flaw-in-input-validation-code/
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 "赞” 吧~
PHP修复输入验证代码中的漏洞相关推荐
- 自检代码中trustmanager漏洞_2020-11微软漏洞通告
微软官方发布了11月的安全更新.本月更新公布了112个漏洞,包含35个远程代码执行漏洞,37个特权提升漏洞,19个信息泄露漏洞以及10个身份假冒漏洞,其中17个漏洞级别为"Critical& ...
- 自检代码中trustmanager漏洞_Windows内核漏洞利用教程
堆栈溢出漏洞 首先,我们将从HackSysExtremeVulnerableDriver中的vanilla栈溢出漏洞开始讲起. 当向堆栈上的缓冲区存放的数据超出其存储容量时(例如,向16字节缓冲区(这 ...
- Dogecoin官方提醒:有消息称Dogecoin v1.15.0修复v1.14.3中的漏洞,其未指向官网或为恶意软件
Dogecoin官方提醒称,有关于Dogecoin v1.15.0的消息和帖子声称修复了v1.14.3中的漏洞,但并非指向Dogecoin官网.这不是Dogecoin核心客户端的合法版本.Dogeco ...
- 看我如何发现(并修复)Python 源代码中的漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 James Kettle 此前曾就 web 缓存投毒发布了一篇研究文章,本文作者为了更深入地了解这个领域的知识并查找开源领域中的相关漏洞,研究了 ...
- 简单的密码输入验证代码(java)
密码验证问题(要求): 从键盘录入六位密码 ,验证密码是不是六位 ,如果不是六位提示用户重新录入 ,直到录入是六位: 校验密码是否正确 ,三次以内输入密码正确显示欢迎 光临,否则显示密码错误请重新输入 ...
- 自检代码中trustmanager漏洞_通达OA远程代码执行漏洞通告
报告编号:B6-2020-031801
- WEB安全:浅谈输入验证
近期负责一个主站系统的Code Review,过程中排查了一些由于输入验证引起的安全漏洞,但遗憾的是遗漏了一个分支功能点,导致线上用户昵称可能存在被篡改的风险.打算总结分享一些安全方面的经常,所以有了 ...
- azure云数据库_Azure SQL数据库中的漏洞评估和高级威胁防护
azure云数据库 In today's time where data breaches are highly expected to happen, there is a high need to ...
- ssh密码长度漏洞java_Linux中 OpenSSH 输入验证错误漏洞(CVE-2019-16905) 修复解决方案...
解决方案: redhat6.7与centos6.7版本升级到openssh8.1版本与openssl-1.1.1自动化脚本,解决linuxOpenSSH输入验证错误漏洞(CVE-2019-16905) ...
最新文章
- Python的深浅拷贝讲解!
- Angular.js 最强学习资源合集
- 利用计算机漏洞犯罪,利用漏洞非法谋利2000元怎么处罚
- context switch的切换过程(TTBR0的切换/ASID的介绍)
- iOS开发者React Native学习路线
- leetcode-237-删除链表中的节点
- 让Python中类的属性具有惰性求值的能力
- 手机客户端和服务器端通信
- 浏览器开发重要的参考博客
- 从集合大小的定义到数学结构-解决了多年的疑惑
- Javascript 中的变量作用域问题
- H3C题库HCNE的 最新
- eas账号是什么意思_账户和帐号是什么意思,有区别吗?
- (LINPACK)HPL测试成功步骤整理
- 年薪百万不如狗?深圳的程序员才是买房界的黑天鹅!
- 对文件进行哈夫曼编码压缩与译码的C++实现 以及压缩率计算 ——HIT杨朔
- java面向对象编程(六)--四大特征之继承
- java程序员昵称_Java程序员需要掌握的几个代码命名
- HT66F2390/STM32——AM2320温湿度传感器
- oracle中12560,Oracle ORA-12560解决方法
热门文章
- android安卓Sqlite数据库实现用户登录注册
- 微软企业库Unity学习笔记
- 四叉堆 VS 二叉堆
- DATE_FORMAT、when case函数用法
- 根据Return Code判断gui连接SAP服务器的问题
- 抽象数据类型(顺序栈)、断言、包含头文件、内联函数、非内联成员函数[C++ In Action][4]...
- 原生JS封装运动框架。
- GTID复制异常的解决步骤
- 一个好的产品要有一个排查问题、报表、运营等相关工具
- centos 6.7 ssh 免密码