UbuntuÄÚºËOverlayFSȨÏÞÌÓÒÝ©¶´·ÖÎö£¨CVE-2021-3493£©

Ðû²¼Ê±¼ä 2021-04-29

±³  ¾°


ƾ¾Ý¹Ù·½½éÉÜ£¬OverlayFs©¶´ÔÊÐíUbuntuϵĵ±µØÓû§»ñµÃrootȨÏÞ ¡£Õâ¸ö©¶´ÊÇUbuntuϵͳÖеÄÌض¨ÎÊÌ⣬ÔÚ¸ÃÎÊÌâÖУ¬Î´ÕýÈ·ÑéÖ¤¹ØÓÚÓû§namespaceÎļþϵͳ¹¦Ð§µÄÓ¦Ó÷¨Ê½ ¡£ÓÉÓÚUbuntu¸½´øÁËÒ»¸öÔÊÐí·ÇÌØȨµÄOverlayfs¹ÒÔصIJ¹¶¡£¬½áºÏÕâ¸ö²¹¶¡¹ÒÔØOverlayfs¿ÉÒÔȨÏÞÌÓÒÝ£¬µ½´ïȨÏÞÌáÉýµÄÄ¿µÄ ¡£


Ó°Ïì°æ±¾


Ubuntu 20.10

Ubuntu 20.04 LTS

Ubuntu 18.04 LTS

Ubuntu 16.04 LTS

Ubuntu 14.04 ESM


©¶´¸´ÏÖ


Ê×Ïȼì²ìÄں˰汾£¬ÎªÊÜÓ°Ïì°æ±¾±àÒëexploitºóÖ´ÐУ¬ÌáȨÀÖ³É ¡£ÈçÏÂͼËùʾ£º


1.jpg


Ïà¹Ø½éÉÜ


£¨1£©ÐéÄâÎļþϵͳ

Ϊ֧³ÖÖÖÖÖ±¾»úÎļþϵͳ£¬ÇÒÔÚͬʱÔÊÐí·ÃÎÊÆäËû²Ù×÷ϵͳµÄÎļþ£¬LinuxÄÚºËÔÚÓû§½ø³Ì£¨»òC³ß¶È¿â£©ºÍÎļþϵͳʵÏÖÖ®¼äÒýÈëÁËÒ»¸ö³éÏó²ã ¡£¸Ã³éÏó²ã³Æ֮ΪÐéÄâÎļþϵͳ£¨Virtual File System£©¼ò³ÆVFS£¬ÈçÏÂͼËùʾ£º


2.jpg


VFSΪËùÓеÄÎļþϵͳÌṩÁËͳһµÄ½Ó¿Ú£¬¶Ôÿ¸ö¾ßÌåÎļþϵͳµÄ·ÃÎÊҪͨ¹ýVFS½ç˵µÄ½Ó¿ÚÀ´ÊµÏÖ ¡£VFS³éÏóÁ˼¸¸öÖØÒªµÄ½á¹¹£ºsuper_block£¬dentry£¬inode£¬file£¬Í¨¹ýÕâЩ½á¹¹½«Ò»¸öÕæʵµÄÎļþϵͳ³éÏóµ½ÄÚ´æÖУ¬´Ó¶øͨ¹ý¹ÜÀíÕâЩ¹¤¾ß¶ÔÎļþϵͳ½øÐвÙ×÷ ¡£


£¨2£©OverlayÎļþϵͳ

OverlayFSÊÇÒ»¸öÃæÏòLinuxµÄÎļþϵͳ·þÎñ£¬ÆäʵÏÖÒ»¸öÃæÏòÆäËûÎļþϵͳµÄÁªºÏ¹ÒÔØ ¡£ËüÓÚ2014Äê±»ºÏ²¢µ½LinuxÄں˵Ä3.18°æ±¾ ¡£OverlayFSµÄÖ÷Òª»úÖÆÉæ¼°µ½Á½¸öÎļþϵͳ£¬ÌṩͬһÃû³ÆµÄĿ¼ʱ£¬Ä¿Â¼·ÃÎʺϲ¢ ¡£³ý´ËÖ®Í⣬OverlayFS·ºÆðÆäÖÐÒ»¸öËù·¢ÉúµÄ¹¤¾ß£¬¡°Éϲ㡱ÎļþϵͳÓÅÏÈ ¡£OverlayFSÓëÆäËûÁýÕÖÐÍÎļþϵͳ²îÒ죬OverlayFSºÏ²¢µÄĿ¼×ÓÊ÷·×Æ綨ÊÇÀ´×Ô²îÒìµÄÎļþϵͳ ¡£Ð§¹ûÈçÏÂͼËùʾ£º


3.jpg


Æä¹ÒÔØÎļþµÄ»ù±¾ÃüÁîÈçÏ£º

mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged ¡£


ÆäÖС°lower1:lower2:lower3¡±ÌåÏÖ²îÒìµÄlower²ãĿ¼£¬²îÒìµÄĿ¼ʹÓá°:¡±À뿪£¬ÌõÀí¹ØϵÒÀ´ÎΪlower1 > lower2 > lower3£¨×¢£º¶àlower²ã¹¦Ð§Ö§³ÖÔÚLinux-4.0ºÏÈ룬Linux-3.18°æ±¾Ö»ÄÜÖ¸¶¨Ò»¸ölower dir£©,È»ºóupperºÍworkĿ¼·Ö±ðÌåÏÖ£ºupper²ãĿ¼ºÍÎļþϵͳ¹ÒÔغó£¬ÓÃÓÚ´æ·ÅÁÙʱºÍ¼ä½ÓÎļþµÄÊÂÇé»ùĿ¼£¨work base dir£©£¬×îºóµÄmergedĿ¼¾ÍÊÇ×îÖյĹÒÔصãĿ¼ ¡£ÈôÒ»ÇÐ˳Àû£¬ÔÚÖ´ÐÐÒÔÉÏÃüÁîºó£¬overlayfs¾ÍÀֳɹÒÔص½mergedĿ¼ÏÂÁË ¡£


£¨3£©capabilitiy

ΪÁ˽øÐÐȨÏÞ¼ì²é£¬Linuxϵͳ½«½ø³Ì·ÖΪÁËÁ½Àࣺprivileged½ø³Ì£¨effective UIDΪ0£©ºÍ unprivileged ½ø³Ì£¨effective UIDΪ·Ç0£© ¡£privileged½ø³Ì¿ÉÒÔÈƹýËùÓеÄÄÚºËȨÏÞ¼ì²é£¬¶øunprivileged ½ø³ÌÒª½øÐÐÑϸñµÄȨÏÞ¼ì²é ¡£´Ó2.2°æ±¾µÄÄں˿ªÊ¼£¬linux¶ÔȨÏÞ½øÐÐÁËϸ·Ö£¬·ÖΪ¶àÖÖ²îÒìµÄȨÏÞ£¬³Æ֮Ϊcapability ¡£capability¿ÉÒÔ×÷ÓÃÔÚ½ø³ÌÉÏ£¬Ò²¿ÉÒÔ×÷ÓÃÔÚ·¨Ê½ÎļþÉÏ ¡£Ä¿Ç°£¬LinuxϵͳÉÏʵÏÖÁË37ÖÖcapability ¡£


ÿ¸ö½ø³Ì¶¼ÓÐÎå¸öcapability¼¯ºÏ£ºPermitted£¬Inheritable£¬Effective£¬Ambient£¬Bounding ¡£ÎļþµÄcapabilityÉú´æÔÚÎļþµÄÀ©Õ¹ÊôÐÔsecurity.capabilityÖÐ ¡£ÎļþÓÐÈý¸öcapabilitiy¼¯ºÏ£ºPermitted£¬Inheritable£¬Effective ¡£ÎļþµÄcapabilityºÍ½ø³ÌµÄcapabilityÒ»ÆðÀ´¾ö¶¨ÔÚÖ´ÐÐexecveºó£¬½ø³ÌµÄcapability ¡£


©¶´Ô­Àí


£¨1£©OverlayFS¹ÒÔØ

ͨ³£Çé¿öÏ£¬¹ÒÔØÎļþϵͳÊÇÐèÒªÌØȨµÄ£¬µ«ÊÇÔÚUbuntuϵͳÖУ¬ÆÕͨÓû§±ã¿ÉÒÔ¹ÒÔØOverlayFS ¡£ÒÔ5.4.0°æ±¾ÄÚºËÖ÷Ïß´úÂëΪÀý£¬ovl_fs_type½á¹¹Ìå½ç˵ÈçÏÂͼËùʾ£º

 

4.jpg


ÒÔUbuntu20.04µÄÄں˲¹¶¡linux_5.4.0-26.30.diffΪÀý£¬²¹¶¡ÈçÏÂͼËùʾ£º

 

5.jpg


Ìí¼ÓÁËfs_flagsÊý¾ÝÓò£¬²¢ÉèÖÃΪFS_USERNS_MOUNT£¬ÌåÏÖ½«ÔÊÐíÒ»¸öÆÕͨÓû§ÔÚµÍȨÏÞÓû§ÃüÃû¿Õ¼äÖÐmoutÒ»¸öoverlayfsÎļþϵͳ ¡£µ±È¥mountÒ»¸öoverlayfsÎļþϵͳʱ£¬µ÷Ó÷¾¶ÈçÏÂͼËùʾ£º


6.jpg


»áµ÷Óõ½do_new_mount()º¯Êý£¬¸Ãº¯ÊýÊÇ´´½¨Ò»¸öеÄmount£¬²¢½«Æä·ÅÈënamespaceÊ÷ÖУ¬ÊµÏÖ´úÂëÈçÏÂͼËùʾ£º


7.jpg


ÐÐ2792£¬»ñÈ¡Òª¹ÒÔصÄÎļþϵͳÀàÐÍ£¬ÕâÀïÊÇoverlay ¡£È»ºó¾ÍÊǽøÐÐcapabilitiyУÑ飬ÈçÏÂͼËùʾ£º


8.jpg


ÓÉÓÚfs_flags±»ÉèÖÃΪFS_USERNS_MOUNT£¬½øÈëns_capable()º¯Êý£¬×îºóͨ¹ý¼ìÑéºó£¬ÈçÏÂͼËùʾ£º


9.jpg


¶øÇÒÉèÖÃcurrent->flagsΪPF_SUPERPRIV£¬¼´ÔÚµ±Ç°½ø³ÌÉÏÉèÖ󬼶ȨÏÞ£¬²¢·µ»Øture ¡£ËùÒÔͨ¹ý¹ÒÔØoverlayÎļþϵͳ£¬µ±Ç°½ø³Ì¾ß±¸Á˳¬¼¶È¨ÏÞ ¡£


 £¨2£©È¨ÏÞÌÓÒÝ

¸Ã©¶´ÊÇÔÚsetxattr()º¯ÊýÖз¢ÉúµÄ£¬µ±¶ÔÎļþÀ©Õ¹ÊôÐÔµÄcapabilitiy½øÐÐÉèÖÃʱ£¬È¨ÏÞУÑé²»³¹µ× ¡£ÏÂÃæÊÇ"SSD Secure Disclosure"Åû¶µÄExpÖ´ÐÐÇé¿ö£¬µ÷Ó÷¾¶ÈçÏÂͼËùʾ£º


10.jpg


ÕâÀïpathnameΪ¡°./ovlcap/merge/magic¡±£¬ÐÐ468£¬µ÷ÓÃcap_convert_nscap()º¯Êý£¬½«ÒªÉèÖõÄcapת»»µ½nscapÖУ¬ÈçÏÂͼËùʾ£º


11.jpg


½øÈëcap_convert_nscap()º¯Êý£¬½øÐÐÏà¹Ø¼ì²âºó£¬Èç¹ûÊÇcapabilitiy°æ±¾2£¬ÔòÖ±½Óµ÷ÓÃns_capable()½øÐмìÑ飬ƾ¾Ý×¢ÊÍ¿ÉÖª£¬Èç¹ûuserÓг¬¼¶È¨ÏÞ£¬Ö±½ÓдÈë²¢·µ»Ø ¡£


12.jpg


ºÁÎÞÒÉÎÊ£¬ÕâÀï¿Ï¶¨ÊǼìÑéͨ¹ýµÄ ¡£´òÓ¡Òªº¦Äڴ棬ÈçÏÂͼËùʾ£º


13.jpg


¼Ä´æÆ÷raxΪ0x1£¬ÌåÏÖ·µ»Øture ¡£ÒòΪµ±Ç°·ÃÎʵÄinodeÊôÓÚoverlayÎļþϵͳµÄ ¡£´Ócap_convert_nscap()º¯ÊýÕýÈ··µ»Øºó£¬Ëæ¼´½øÈëvfs_setxattr()º¯Êý£¬ÕâÊǵÚÒ»´Î½øÈë ¡£½ÓÏÂÀ´¾ÍÊÇ·Ö·¢µ½overlayÎļþϵͳ¶ÔÓ¦µÄovl_xattr_set()º¯ÊýÖУ¬µ÷Ó÷¾¶ÈçÏÂͼËùʾ£º


14.jpg


¿´ovl_xattr_set()º¯ÊýµÄ²¿ÃÅʵÏÖ´úÂ룬»ñÈ¡upperdentryºÍrealdentry£¬ÈçÏÂͼËùʾ£º


15.jpg


»ñÈ¡ºó£¬´òÓ¡upperdentryºÍrealdentryÄڴ棬ÈçÏÂͼËùʾ£º


16.jpg


ƾ¾ÝoverlayÎļþϵͳÌØÐÔ£¬ÕâÀïµÄupperdentryºÍrealdentryÓ¦¸ÃÊÇ¡°./ovlcap/upper¡±Ä¿Â¼ÏµÄmagicµÄĿ¼Ï´òÓ¡ÄÚ´æ¿ÉÖª£¬ÈçÏÂͼËùʾ£º


17.jpg


È·¶¨ÕæʵµÄdentryºó£¬µÚ¶þ´Îµ÷ÓÃvfs_setxattr()º¯Êý£¬ÈçÏÂͼËùʾ£º


18.jpg


´ËʱµÄdentryÊÇÊôÓÚext3ÎļþϵͳµÄ£¬´òÓ¡ÄÚ´æ¿ÉÖª£¬ÈçÏÂͼËùʾ£º


19.jpg


µ½´Ë¿ÉÖª£¬Êµ¼ÊÉÏÊǶÔext3Îļþϵͳϵġ°./ovlcap/upper/magic¡±½øÐÐÉèÖÃcap ¡£È¨ÏÞÌÓÒݹý³ÌÈçÏÂͼËùʾ£º


20.jpg


©¶´ÀûÓ÷ÖÎö


"SSD Secure Disclosure"¹Ù·½ÒѾ­Åû¶ÁËÏà¹ØExp£¬¾ßÌå·ÖÎöÈçÏ£º

 

21.jpg


ÕâÀï½ç˵ºóÃæ¹ÒÔØoverlayÎļþϵͳµÄÎļþ¼ÐÃû³Æ:


22.jpg


²¢×Ô½ç˵xmkdirº¯Êý´´½¨ÕâЩÎļþ¼Ð:


23.jpg


È»ºó»ñÈ¡µ±Ç°Óû§µÄuidºÍgid£º

 

24.png


´´½¨ÐµÄuser namespace£¬ÒòΪoverlayfs mountÐèÒªCAP_SYS_MOUNTÄÜÁ¦£¬Òò´ËÐèҪн¨Ò»¸öNEWUSERµÄnamespace£¬ÕâÑù¾Í¾ßÓÐCAP_SYS_MOUNT£¬


25.jpg


CLONE_NEWNSºÍCLONE_NEWUSER½ç˵£º


26.jpg


Óõ±Ç°Óû§µÄuidºÍgidµÈ¸Äд/proc/selfϵĶÔÓ¦Îļþ£¬¶øÇÒÓøÃȨÏÞϵÄnamespace¹ÒÔØoverlayfs£¬Ç°Ãæ¼ò½é˵ÁË£¬ÓÉÓÚubuntuµÄ²¹¶¡´æÔÚ£¬¸Ã²Ù×÷ÊǺϷ¨µÄ ¡£


27.jpg


 ¶ÔӦĿ¼Ï¿ÉÒÔ¿´µ½ÎÒÃÇÐÞ¸ÄÁ˵ÄÎļþ£¬Í¨¹ý/proc/self/exe¿ÉÒÔÕÒµ½µ±Ç°½ø³ÌµÄ¶þ½øÖÆʵÌ壨Îļþ£©£º


28.jpg


¼ÌÐø»Øµ½expÖУ¬ÏÂÃæ½á¹¹ÁËÒ»¸öcap£¬¸Äcap½ç˵µÄpermittedΪ0xffffffff£¬¶øÇÒ¿ªÆôEffective£¬È»ºó½«/proc/selfϵÄÎļþ¿½±´µ½mergeÎļþ¼ÐÏ£¬Æ¾¾ÝoverlayÎļþϵͳÌØÐÔ£¬Õâ¸ö¿½±´¹ý³Ìʵ¼ÊÊÇ´´½¨./ovlcap/upper/magicÎļþ£¬×îºóµ÷ÓÃsetxattr()º¯Êý£¬½«capÉèÖõ½./ovlcap/merge/magicÉÏÃæ ¡£


29.jpg


ƾ¾ÝÇ°ÎÄ©¶´Ô­Àí½éÉÜ£¬È¨ÏÞÌÓÒݺ󣬴ËʱÊôÓÚext3ÎļþϵͳµÄ./ovlcap/upper/magicÎļþµÄcapabilitiyΪall+ep£¬±ã¿ÉÒÔÀûÓÃcapabilitiy½øÐÐȨÏÞÌáÉý£¬½Ó×ÅÆô¶¯./ovlcap/upper/magic½ø³Ì£¬¸Ã½ø³ÌµÄcapabilitiyÒѾ߱¸all+ep£¬È»ºó½øÐÐsetuid(0)ºÍsetgid(0)ÌáȨ²Ù×÷£¬ÕâÊDZ»ÔÊÐíµÄ ¡£


30.jpg


²¹¶¡¸ú×Ù


©¶´³ÉÒòÔÚÉÏÃæÒѾ­½éÉÜÁË£¬ÕâÀïµÄ²¹¶¡Ò²ºÜ³¹µ×£¬½«cap_convert_nscap·ÅÈëÁËvfs_setxattrÖУ¬¼´Ã¿´Î½øÈëvfs_setxattr()º¯Êýʱ£¬¶¼ÏȽøÐÐȨÏÞУÑ飬ÅжÏcapabilitiyºÍÃüÃû¿Õ¼äµÄȨÏÞÊÇ·ñÆ¥Åä ¡£


31.jpg


²Î¿¼Á´½Ó£º

[1] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3493

[2] https://access.redhat.com/security/cve/cve-2021-3493
[3] https://ubuntu.com/security/CVE-2021-3493
[4] https://github.com/briskets/CVE-2021-3493
[5] https://cve.report/CVE-2021-3493.pdf
[6] https://blog.csdn.net/qq_15770331/article/details/96699386
[7] https://lwn.net/Articles/671641/
[8] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1793458/comments/4
[9] https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/xenial/commit/?id=98a3740920f8f3362c1ac50598af2dc632f5051a


¶«É­Æ½Ì¨»ý¼«·ÀÓùʵÑéÊÒ£¨ADLab£©


ADLab½¨Á¢ÓÚ1999Ä꣬ÊÇÖйúÄþ¾²ÐÐÒµ×îÔ罨Á¢µÄ¹¥·À¼¼ÊõÑо¿ÊµÑéÊÒÖ®Ò»£¬Î¢ÈíMAPP¼Æ»®ºËÐijÉÔ±£¬¡°ºÚȸ¹¥»÷¡±¿´·¨Ê×ÍÆÕß ¡£½ØֹĿǰ£¬ADLabÒÑͨ¹ýCVEÀÛ¼ÆÐû²¼Äþ¾²Â©¶´½ü1100¸ö£¬Í¨¹ý CNVD/CNNVDÀÛ¼ÆÐû²¼Äþ¾²Â©¶´1000Óà¸ö£¬Á¬Ðø±£³Ö¹ú¼ÊÍøÂçÄþ¾²ÁìÓòÒ»Á÷Ë®×¼ ¡£ÊµÑéÊÒÑо¿Æ«Ïòº­¸Ç²Ù×÷ϵͳÓëÓ¦ÓÃϵͳÄþ¾²Ñо¿¡¢ÖÇÄÜÖÕ¶ËÄþ¾²Ñо¿¡¢ÎïÁªÍøÖÇÄÜÉ豸Äþ¾²Ñо¿¡¢WebÄþ¾²Ñо¿¡¢¹¤¿ØϵͳÄþ¾²Ñо¿¡¢ÔÆÄþ¾²Ñо¿ ¡£Ñо¿½á¹ûÓ¦ÓÃÓÚ²úÎïºËÐļ¼ÊõÑо¿¡¢¹ú¼ÒÖصã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨ÒµÄþ¾²·þÎñµÈ ¡£


adlab.jpg