¡¾·ì϶¹«¸æ¡¿Go XML½âÎöÆ÷¶à¸ö°²È«·ì϶

°ä²¼¹¦·ò 2020-12-15

0x00 ·ì϶¸ÅÊö

²úÆ·Ãû³Æ

CVE ID

Àà ÐÍ

·ì϶µÈ¼¶

Ô¶³ÌÀûÓÃ

encoding/xml

CVE-2020-29509

Éí·ÝÑéÖ¤ÈÆ¹ý¡¢È¨ÏÞÌáÉý

ÑϳÁ

ÊÇ

CVE-2020-29510

Éí·ÝÑéÖ¤ÈÆ¹ý¡¢È¨ÏÞÌáÉý

ÑϳÁ

ÊÇ

CVE-2020-29511

Éí·ÝÑéÖ¤ÈÆ¹ý¡¢È¨ÏÞÌáÉý

ÑϳÁ

ÊÇ

0x01 ·ì϶ÏêÇé

 

image.png

Go£¨ÓÖ³ÆGolang£©ÊÇGoogle¿ª·¢µÄÒ»ÖÖ¾²Ì¬Ç¿ÀàÐÍ¡¢±àÒëÐÍ¡¢²¢·¢ÐÍ £¬£¬£¬£¬£¬²¢ÓµÓÐÀ¬»ø»ØÊÕÖ°Äܵıà³Ì˵»°¡£¡£¡£¡£¡£ ¡£¡£Package xml ʵÏÖÁËÒ»¸öÀí½â XML Ãû³Æ¿Õ¼äµÄµ¥Ò» XML 1.0 ·ÖÎöÆ÷¡£¡£¡£¡£¡£ ¡£¡£

½üÈÕ £¬£¬£¬£¬£¬MattermostÓëGoºÏ×÷Åû¶ÁËGoµÄXML½âÎöÆ÷ÖеÄ3¸öÑϳÁ·ì϶£¨CVE-2020-29509¡¢CVE-2020-29510ºÍCVE-2020-29511£©¡£¡£¡£¡£¡£ ¡£¡£ÕâЩ·ì϶´æÔÚÓÚGoµÄencoding/xml°üÖÐ £¬£¬£¬£¬£¬CVSSÆÀ·Ö¾ùΪ9.8¡£¡£¡£¡£¡£ ¡£¡£

ÓÉÓÚxml.DecoderºÍxml.EncoderÍù·µÒýÆðµÄ±äÒì¿ÉÄܻᵼÖÂÀûÓ÷¨Ê½£¨ÈçSAML ºÍ XML-DSig£©ÃýÎó»ò¾ö²ßì¶Ü¡£¡£¡£¡£¡£ ¡£¡£¹¥»÷Õß¿ÉÀûÓÃÕâЩ·ìÏ¶ÈÆ¹ý»ò´Û¸Ä»ùÓÚGoµÄSAMLµÄÉí·ÝÑéÖ¤¡£¡£¡£¡£¡£ ¡£¡££¨SAMLΪ°²È«ÉêÃ÷ÏóÕ÷˵»° £¬£¬£¬£¬£¬ÊÇÒ»ÖÖWebÈÏÖ¤³ß¶È £¬£¬£¬£¬£¬±»¶à¸ö³ÛÃûµÄÍøÕ¾ºÍ·þÎñÓÃÓÚ¼ò»¯Ê¹ÓÃXMLµÄÍøÉϵǼ¡£¡£¡£¡£¡£ ¡£¡££©

encoding/xmlÖеÄXMLÊôÐÔ²»²»±ä£¨CVE-2020-29509£©

ÓÉÓÚencoding/xml°üÔÚÏóÕ÷»¯Íù·µ¹ý³ÌÖÐÎÞ·¨ÕýÈ·±£ÁôÊôÐÔÃû³Æ¿Õ¼äǰ׺µÄÓïÒå £¬£¬£¬£¬£¬Ê¹ÓÃencoding/xml½øÐбàÂëºÍ½âÂëÄܹ»¸ü¸ÄÃû³Æ¿Õ¼ä¼°¶ñÒâ¹¹½¨µÄXMLÊôÐԵı¾µØÃû³Æ¡£¡£¡£¡£¡£ ¡£¡£

ÊÜÓ°ÏìµÄ SAML implementationÄܹ»½«SAMLÉêÃ÷Ú¹ÊÍΪÒÑÊðÃû £¬£¬£¬£¬£¬µ«ÓÉÓÚÊðÃûÑéÖ¤ºÍÊý¾Ý½Ó¼ûÖ®¼äµÄÃû³Æ¿Õ¼äÍ»±ä £¬£¬£¬£¬£¬Òò¶øÄܹ»³ÖÐø´ÓͳһÎĵµµÄδÊðÃû²¿ÃŶÁȡֵ £¬£¬£¬£¬£¬¹¥»÷ÕßÄܹ»ÀûÓô˷ìÏ¶ÈÆ¹ýSAMLÉí·ÝÑéÖ¤»òÌáÉýȨÏÞ¡£¡£¡£¡£¡£ ¡£¡£

Ó°ÏìÁìÓò£º

GoËùÓа汾ÖеÄencoding/xml°ü

 

encoding/xmlÖеÄÖ¸Áî²»²»±ä£¨CVE-2020-29510£©

ÓÉÓÚencoding/xml°üÔÚÏóÕ÷»¯Íù·µ¹ý³ÌÖÐÎÞ·¨ÕýÈ·±£ÁôÖ¸ÁîµÄÓïÒå £¬£¬£¬£¬£¬Ê¹ÓÃencoding/xml½øÐбàÂëºÍ½âÂëÄܹ»Æ¾¾Ý¶ñÒâµÄxmlÖ¸ÁîÒýÈëеĽṹ¡£¡£¡£¡£¡£ ¡£¡£

ÊÜÓ°ÏìµÄ SAML implementationÄܹ»½«SAMLÉêÃ÷Ú¹ÊÍΪÒÑÊðÃû £¬£¬£¬£¬£¬µ«ÊÇÓÉÓÚÊðÃûÑéÖ¤ºÍÊý¾Ý½Ó¼ûÖ®¼äµÄ½á¹¹±äÒì £¬£¬£¬£¬£¬Òò¶øÄܹ»³ÖÐø´ÓͳһÎĵµµÄδÊðÃû²¿ÃŶÁȡֵ £¬£¬£¬£¬£¬¹¥»÷ÕßÄܹ»ÀûÓô˷ìÏ¶ÈÆ¹ýSAMLÉí·ÝÑéÖ¤»òÌáÉýȨÏÞ¡£¡£¡£¡£¡£ ¡£¡£

Ó°ÏìÁìÓò£º

Go 1.15¼°Ö®Ç°°æ±¾ÖеÄencoding/xml°ü

 

encoding/xmlÖеÄXMLÔªËØ²»²»±ä£¨CVE-2020-29511£©

ÓÉÓÚencoding/xml°üÔÚÏóÕ÷»¯Íù·µ¹ý³ÌÖÐÎÞ·¨ÕýÈ·±£ÁôÔªËØÃû³Æ¿Õ¼äǰ׺µÄÓïÒå £¬£¬£¬£¬£¬Ê¹ÓÃencoding/xml½øÐбàÂëºÍ½âÂëÄܹ»¸ü¸ÄÃû³Æ¿Õ¼ä¼°¶ñÒâ¹¹½¨µÄXMLÔªËØµÄ±¾µØÃû³Æ¡£¡£¡£¡£¡£ ¡£¡£

ÊÜÓ°ÏìµÄ SAML implementationÄܹ»½«SAMLÉêÃ÷Ú¹ÊÍΪÒÑÊðÃû £¬£¬£¬£¬£¬µ«ÊÇÓÉÓÚÊðÃûÑéÖ¤ºÍÊý¾Ý½Ó¼ûÖ®¼äµÄÃû³Æ¿Õ¼äÍ»±ä £¬£¬£¬£¬£¬Òò¶øÄܹ»³ÖÐø´ÓͳһÎĵµµÄδÊðÃû²¿ÃŶÁȡֵ £¬£¬£¬£¬£¬¹¥»÷ÕßÄܹ»ÀûÓô˷ìÏ¶ÈÆ¹ýSAMLÉí·ÝÑéÖ¤»òÌáÉýȨÏÞ¡£¡£¡£¡£¡£ ¡£¡£

Ó°ÏìÁìÓò£º

GoËùÓа汾ÖеÄencoding/xml°ü

 

0x02 ´ëÖý¨Òé

ĿǰGo°²È«ÍŶÓÉÐδ°ä²¼·ì϶µÄ²¹¶¡·¨Ê½ £¬£¬£¬£¬£¬µ«ÒѾ­µ¥¶ÀΪijЩ»ùÓÚGoµÄSAMLÏîÄ¿°ä²¼Á˹̶¨°æ±¾¡£¡£¡£¡£¡£ ¡£¡£

¹Ì¶¨°æ±¾

Á´½Ó

Dex IDP°æ±¾2.27.0

https://go-review.googlesource.com/c/go/+/277892/

saml°æ±¾0.4.3-0.4.5

https://github.com/crewjam/saml/releases

gosaml2°æ±¾0.6.0

https://github.com/russellhaering/gosaml2/tags

xml-roundtrip-validator¹¤¾ß£¨Ò»Ê±½â¾ö¹æ»®£©

https://github.com/mattermost/xml-roundtrip-validator


һʱ½â¾ö²½Ö裺

xml-roundtrip-validator¹¤¾ßÄܹ»¼ì²âXMLÖеIJ»²»±ä»ú¹Ø £¬£¬£¬£¬£¬Ô̺¬²»²»±äµÄÊôÐÔÃû³Æ¿Õ¼äǰ׺¡¢²»²»±äÖ¸ÁîºÍ²»²»±äÔªËØÃû³Æ¿Õ¼äǰ׺¡£¡£¡£¡£¡£ ¡£¡£ÔÚŲÓÃÑéÖ¤¹¤¾ßʱ £¬£¬£¬£¬£¬ÈôÊÇÑéÖ¤¹¤¾ß·µ»ØÃýÎó £¬£¬£¬£¬£¬Ôò»á×èÖ¹ÕâЩ·ì϶ÔÚÀûÓ÷¨Ê½Öб»ÀûÓᣡ£¡£¡£¡£ ¡£¡£

 

0x03 ²Î¿¼Á´½Ó

https://github.com/mattermost/xml-roundtrip-validator/blob/master/advisories/unstable-attributes.md

https://www.bleepingcomputer.com/news/security/critical-golang-xml-parser-bugs-can-cause-saml-authentication-bypass/

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-29509

 

0x04 ¹¦·òÏß

2020-12-13  Go°ä²¼°²È«²¼¸æ

2020-12-15  VSRC°ä²¼°²È«¹«¸æ

 

0x05 ¸½Â¼

 

CVSSÆÀ·Ö³ß¶È¹ÙÍø£ºhttp://www.first.org/cvss/

image.png