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

VFSΪËùÓеÄÎļþϵͳÌṩÁËͳһµÄ½Ó¿Ú£¬¶Ôÿ¸ö¾ßÌåÎļþϵͳµÄ½Ó¼ûҪͨ¹ýVFS½ç˵µÄ½Ó¿ÚÀ´ÊµÏÖ¡£VFS³éÏóÁ˼¸¸ö³ÁÒªµÄ½á¹¹£ºsuper_block£¬dentry£¬inode£¬file£¬Í¨¹ýÕâЩ½á¹¹½«Ò»¸öÕæÊµµÄÎļþϵͳ³éÏóµ½ÄÚ´æÖУ¬´Ó¶øÍ¨¹ýÖÎÀíÕâЩ¶ÔÏó¶ÔÎļþϵͳ½øÐвÙ×÷¡£
£¨2£©OverlayÎļþϵͳ
OverlayFSÊÇÒ»¸öÃæÏòLinuxµÄÎļþϵͳ·þÎñ£¬ÆäʵÏÖÒ»¸öÃæÏòÆäËûÎļþϵͳµÄ½áºÏ¹ÒÔØ¡£ËüÓÚ2014Äê±»¹é²¢µ½LinuxÄں˵Ä3.18°æ±¾¡£OverlayFSµÄÖØÒª»úÔìÉæ¼°µ½Á½¸öÎļþϵͳ£¬ÌṩͳһÃû³ÆµÄĿ¼ʱ£¬Ä¿Â¼½Ó¼û¹é²¢¡£³ý´ËÖ®±í£¬OverlayFS³ÊÏÔìäÖÐÒ»¸öËù²úÉúµÄ¶ÔÏ󣬡°Éϲ㡱ÎļþϵͳÓÅÏÈ¡£OverlayFSÓëÆäËû¸²¸ÇÐÍÎļþϵͳ·ÖÆç£¬OverlayFS¹é²¢µÄĿ¼×ÓÊ÷²»Ô¸¶¨ÊÇÀ´×Ô·ÖÆçµÄÎļþϵͳ¡£³ÉЧÈçÏÂͼËùʾ£º

Æä¹ÒÔØÎļþµÄ¸ù»ùºÅÁîÈçÏ£º
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½á¹¹Ìå½ç˵ÈçÏÂͼËùʾ£º

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

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

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

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

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

²¢ÇÒÉèÖÃcurrent->flagsΪPF_SUPERPRIV£¬¼´ÔÚµ±Ç°¹ý³ÌÉÏÉèÖó¬µÈȨÏÞ£¬²¢·µ»Øture¡£ËùÒÔͨ¹ý¹ÒÔØoverlayÎļþϵͳ£¬µ±Ç°¹ý³Ì¾ß±¸Á˳¬µÈȨÏÞ¡£
£¨2£©È¨ÏÞÌÓÒÝ
¸Ã·ì϶ÊÇÔÚsetxattr()º¯ÊýÖвúÉúµÄ£¬µ±¶ÔÎļþÀ©´óÊôÐÔµÄcapabilitiy½øÐÐÉèÖÃʱ£¬È¨ÏÞУÑé²»³¹µ×¡£ÏÂÃæÊÇ"SSD Secure Disclosure"Åû¶µÄExpÖ´ÐÐÇé¿ö£¬Å²ÓÃõè¾¶ÈçÏÂͼËùʾ£º

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

½øÈëcap_convert_nscap()º¯Êý£¬½øÐÐÓйؼì²âºó£¬ÈôÊÇÊÇcapabilitiy°æ±¾2£¬ÔòÖ±½ÓŲÓÃns_capable()½øÐмìÑ飬ƾ¾Ý×¢½â¿ÉÖª£¬ÈôÊÇuserÓ㬵ÈȨÏÞ£¬Ö±½ÓдÈë²¢·µ»Ø¡£

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

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

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

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

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

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

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

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

·ì϶ÀûÓ÷ÖÎö
"SSD Secure Disclosure"¹Ù·½ÒѾÅû¶ÁËÓйØExp£¬¾ßÌå·ÖÎöÈçÏ£º

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

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

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

´´½¨ÐµÄuser namespace£¬ÓÉÓÚoverlayfs mount±ØÒªCAP_SYS_MOUNTÄÜÁ¦£¬Òò¶ø±ØÒªÐ½¨Ò»¸öNEWUSERµÄnamespace£¬ÕâÑù¾ÍÓµÓÐCAP_SYS_MOUNT£¬

CLONE_NEWNSºÍCLONE_NEWUSER½ç˵£º

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

¶ÔӦĿ¼ÏÂÄܹ»¿´µ½ÎÒÃÇÅú¸ÄÁ˵ÄÎļþ£¬Í¨¹ý/proc/self/exeÄܹ»ÕÒµ½µ±Ç°¹ý³ÌµÄ¶þ½øÔìʵÌ壨Îļþ£©£º

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

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

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

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



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