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

°ä²¼¹¦·ò 2021-04-29

±³  ¾°


ƾ¾Ý¹Ù·½½éÉÜ £¬£¬£¬OverlayFs·ì϶ÔÊÐíUbuntuϵı¾µØÓû§»ñµÃrootȨÏÞ¡£Õâ¸ö·ì϶ÊÇUbuntuϵͳÖеÄÌØ¶¨ÎÊÌâ £¬£¬£¬ÔÚ¸ÃÎÊÌâÖÐ £¬£¬£¬Î´ÕýÈ·ÑéÖ¤¹ØÓÚÓû§namespaceÎļþϵͳְÄܵÄÀûÓ÷¨Ê½¡£ÓÉÓÚUbuntu¸½´øÁËÒ»¸öÔÊÐí·ÇÌØÈ¨µÄOverlayfs¹ÒÔØµÄ²¹¶¡ £¬£¬£¬½áºÏÕâ¸ö²¹¶¡¹ÒÔØ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¹ÒÔØ

ͨ³£Çé¿öÏ £¬£¬£¬¹ÒÔØÎļþϵͳÊDZØÒªÌØÈ¨µÄ £¬£¬£¬µ«ÊÇÔÚ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


OG¶«·½Ìü»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©


ADLab³ÉÁ¢ÓÚ1999Äê £¬£¬£¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò» £¬£¬£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ± £¬£¬£¬¡°ºÚȸ¹¥»÷¡±¸ÅÄîÊ×ÍÆÕß¡£½ØÖ¹Ä¿Ç° £¬£¬£¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶½ü1100¸ö £¬£¬£¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶1000Óà¸ö £¬£¬£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£³¢ÊÔÊÒ×êÑз½Ïòº­¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑС¢ÖÇÄÜÖն˰²È«×êÑС¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑС¢Web°²È«×êÑС¢¹¤¿ØÏµÍ³°²È«×êÑС¢Ôư²È«×êÑС£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑС¢¹ú¶ÈÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£


adlab.jpg