PythonÔ¶³Ì´úÂëÖ´Ðзì϶£¨CVE-2021-3177£©
°ä²¼¹¦·ò 2021-02-240x00 ·ì϶¸ÅÊö
CVE ID | CVE-2021-3177 | ʱ ¼ä | 2021-02-24 |
Àà ÐÍ | RCE | µÈ ¼¶ | ÑϳÁ |
Ô¶³ÌÀûÓà | ÊÇ | Ó°ÏìÁìÓò | Python 3.x- 3.9.1 |
0x01 ·ì϶ÏêÇé

PythonÊǵ±Ç°×îÊÜӽӵķ¨Ê½Éè¼ÆËµ»°Ö®Ò»£¬ËüÌṩÁ˸ßЧµÄ¸ß¼¶Êý¾Ý½á¹¹£¬¿ÉÄܵ¥Ò»ÓÐЧµØÃæÏò¶ÔÏó±à³Ì¡£Ëæ×Ű汾µÄ²»ÐݸüкÍ˵»°ÐÂÖ°ÄܵÄÔö³¤£¬Öð²½±»ÓÃÓÚ¶ÀÁ¢µÄ¡¢´óÐÍÏîÖ÷ÕÅ¿ª·¢¡£
2021Äê02ÔÂ19ÈÕ£¬Python¹Ù·½°ä²¼°²È«²¼¸æ£¬¹«¿ªÁËpythonÖеÄÒ»¸öRCE·ì϶£¨CVE-2021-3177£©£¬ÆäCVSSv3ÆÀ·ÖΪ9.8¡£
¡¡Python ctypesÄ£¿éÊÇPythonÄÚ½¨µÄÓÃÓÚŲÓö¯Ì¬Á´½Ó¿âº¯ÊýµÄÖ°ÄÜÄ£¿é¡£ÓÉÓÚδ²é³sprintf£¨£©º¯ÊýµÄ³¤¶È£¬_ctypes/callproc.cÖеÄPyCArg_repr£¨£©º¯ÊýÖдæÔÚ»º³åÇøÒç¶Âí½Å£¬Õâ¿ÉÄܻᵼÖÂijЩ½ÓÊܸ¡µãÊý×÷Ϊ²»³ÉÐÅÊäÈëµÄPythonÀûÓ÷¨Ê½ÖеÄÔ¶³Ì´úÂëÖ´ÐС£
µ±Ì죬Redhat¹Ù·½Ò²°ä²¼Á˸÷ì϶µÄ°²È«¹«¸æ£¬Æä¶Ô¸Ã·ì϶µÄCVSSv3ÆÀ·ÖΪ5.9£¬²¢°µÊ¾´Ë·ì϶´øÀ´µÄ×î´óÍþвÊǶÔϵͳµÄ¿ÉÓÃÐÔ¡£Python¹Ù·½ÔòÒÔΪ¸Ã·ì϶²»Ì«¿ÉÄܱ»ÀûÓã¬ÓÉÓÚÔì³ÉRCE±ØÒªÂú×ãÒÔÏÂǰÌ᣺
l ´ÓÔ¶³Ì¶Ë´«µÝÒ»¸ö²»ÊÜÐÅÀµµÄ¸¡µãÊýµ½ctypes.c_double.from_param (°ÑÎÈ£ºPython¸¡µãÊý²»ÊÜÓ°Ïì)¡£
l ½«¸Ã¶ÔÏ󴫵ݸørepr()(ÀýÈçͨ¹ýÈÕÖ¾¼Í¼)¡£
l ʹ¸¡µãÊý³ÉΪÓÐЧµÄ»úе´úÂë¡£
l Èûº³åÇøÒç³öÔÚÕýÈ·µÄµØÎ»¸²¸Ç²Ö¿â£¬ÈôúÂëµÃµ½Ö´ÐС£
¿ÉʹÓÃÈçϺÅÁîÔì³É»º³åÇøÒç³ö£º
>>> from ctypes import *
>>> c_double.from_param(1e300)
*** buffer overflow detected ***: terminated
Aborted
Ŀǰ¸Ã·ì϶µÄPoCÒѾ¹«¿ª£¬ÑéÖ¤ÈçÏ£º


´Ë±í£¬Python»¹¹«¿ªÁËÁíÒ»¸öWeb»º´æÖж¾·ì϶£¨CVE-2021-23336£©¡£0-3.6.13¡¢3.7.0-3.7.10¡¢3.8.0-3.8.8¡¢3.9.0-3.9.2µÄpython/cpython°üͨ¹ýʹÓÃÃûΪparameter cloakingµÄÏòÁ¿£¬ÈÝÒ×Êܵ½Í¨¹ýurllib.parse.parse_qslºÍurllib.parse.parse_qsµÄWeb»º´æÖж¾¡£
0x02 ´ëÖý¨Òé
½¨ÒéÉý¼¶µ½Python 3.6.13¡¢3.7.10¡¢3.8.8»ò3.9.2¡£
ÏÂÔØÁ´½Ó£º
Python 3.9.2
https://www.python.org/downloads/release/python-392/
Python 3.8.8
https://www.python.org/downloads/release/python-388/
0x03 ²Î¿¼Á´½Ó
https://blog.python.org/2021/02/python-392-and-388-are-now-available.html
https://access.redhat.com/security/cve/cve-2021-3177
https://bugs.python.org/issue42938
https://www.randori.com/cve-2021-3177-vulnerability-analysis/
0x04 ¹¦·òÏß
2021-02-19 Python°ä²¼°²È«²¼¸æ
2021-02-24 VSRC°ä²¼°²È«¹«¸æ
0x05 ¸½Â¼
CVSSÆÀ·Ö³ß¶È¹ÙÍø£ºhttp://www.first.org/cvss/



¾©¹«Íø°²±¸11010802024551ºÅ