Vulnerabilidad en kernel de Linux (CVE-2024-44935)
Gravedad CVSS v3.1: 
            MEDIA
                                                    Tipo: 
          
                          CWE-476
                        Desreferencia a puntero nulo (NULL)
          
        Fecha de publicación: 
                          26/08/2024
                  Última modificación: 
                          03/11/2025
                  Descripción
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad: sctp: corrige null-ptr-deref en reuseport_add_sock(). syzbot informó un null-ptr-deref al acceder a sk2->sk_reuseport_cb en reuseport_add_sock(). [0] La reproducción primero crea un oyente con SO_REUSEPORT. Luego, crea otro oyente en el mismo puerto y al mismo tiempo cierra el primer oyente. El segundo listen() llama a reuseport_add_sock() con el primer oyente como sk2, donde no se espera que sk2->sk_reuseport_cb se borre al mismo tiempo, pero close() lo borra mediante reuseport_detach_sock(). El problema es que SCTP no sincroniza correctamente reuseport_alloc(), reuseport_add_sock() y reuseport_detach_sock(). La persona que llama a reuseport_alloc() y reuseport_{add,detach}_sock() debe proporcionar sincronización para los sockets que están clasificados en el mismo grupo de reuseport. De lo contrario, dichos sockets forman múltiples grupos de reutilización idénticos y todos los grupos excepto uno quedarían silenciosamente muertos. 1. Dos sockets llaman a listening() simultáneamente 2. No se encuentra ningún socket en el mismo grupo en sctp_ep_hashtable[] 3. Dos sockets llaman a reuseport_alloc() y forman dos grupos de reuseport 4. Solo un grupo que llega primero en __sctp_rcv_lookup_endpoint() recibe paquetes entrantes también, podría producirse el null-ptr-deref informado. TCP/UDP garantiza que eso no sucederá si se mantiene el bloqueo del depósito hash. Apliquemos la estrategia de bloqueo a __sctp_hash_endpoint() y __sctp_unhash_endpoint(). [0]: Vaya: fallo de protección general, probablemente para la dirección no canónica 0xdffffc0000000002: 0000 [#1] PREEMPT SMP KASAN PTI KASAN: null-ptr-deref en el rango [0x0000000000000010-0x0000000000000017] CPU: 1 UID: 0 PID: 230 Comm: syz-executor119 No contaminado 6.10.0-syzkaller-12585-g301927d2d2eb #0 Nombre del hardware: Google Google Compute Engine/Google Compute Engine, BIOS Google 27/06/2024 RIP: 0010:reuseport_add_sock+0x27e/0x5e0 net/core/ sock_reuseport.c:350 Código: 00 0f b7 5d 00 bf 01 00 00 00 89 de e8 1b a4 ff f7 83 fb 01 0f 85 a3 01 00 00 e8 6d a0 ff f7 49 8d 7e 12 48 89 f8 48 c1 e8 < 42> 0f b6 04 28 84 c0 0f 85 4b 02 00 00 41 0f b7 5e 12 49 8d 7e 14 RSP: 0018:ffffc9000b947c98 EFLAGS: 00010202 RAX: 0000000000000002 X: ffff8880252ddf98 RCX: ffff888079478000 RDX: 0000000000000000 RSI: 00000000000000001 RDI: 0000000000000012 RBP : 0000000000000001 R08: ffffffff8993e18d R09: 1ffffffff1fef385 R10: dffffc0000000000 R11: ffffbfff1fef386 R12: ffff8880252ddac0 R13: dffffc0000000000 : 0000000000000000 R15: 0000000000000000 FS: 00007f24e45b96c0(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007ffcced5f7b8 CR3: 00000000241be000 CR4: 00000000003506f0 DR0: 00000000000000000 DR1: 0000000000000000 DR2: 0000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Seguimiento de llamadas:  __sctp_hash_endpoint net/sctp/input.c:762 [en línea] sctp_hash_endpoint +0x52a/0x600 net/sctp/input.c:790 sctp_listen_start net/sctp/socket.c:8570 [en línea] sctp_inet_listen+0x767/0xa20 net/sctp/socket.c:8625 __sys_listen_socket net/socket.c:1883 [en línea ] __sys_listen+0x1b7/0x230 net/socket.c:1894 __do_sys_listen net/socket.c:1902 [en línea] __se_sys_listen net/socket.c:1900 [en línea] __x64_sys_listen+0x5a/0x70 net/socket.c:1900 arco x64/ x86/entry/common.c:52 [en línea] do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83 Entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f24e46039b9 Código: 28 00 00 00 75 05 8 83 c4 28 c3 e8 91 1a 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f24e45b9228 EFLAGS: 00000246 ORIG_RAX: 0000000000000032 RAX: ffffffffffffffda RBX: 00007f24e468e428 RCX: e46039b9 RDX: 00007f24e46039b9 RSI: 0000000000000003 RDI: 0000000000000004 ---truncado---
                        Impacto
Puntuación base 3.x
          5.50
        Gravedad 3.x
          MEDIA
        Productos y versiones vulnerables
| CPE | Desde | Hasta | 
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.0 (incluyendo) | 5.4.282 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (incluyendo) | 5.10.224 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.165 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.105 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.46 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.10.5 (excluyendo) | 
| cpe:2.3:o:linux:linux_kernel:6.11:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.11:rc2:*:*:*:*:*:* | 
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/05e4a0fa248240efd99a539853e844f0f0a9e6a5
 - https://git.kernel.org/stable/c/1407be30fc17eff918a98e0a990c0e988f11dc84
 - https://git.kernel.org/stable/c/52319d9d2f522ed939af31af70f8c3a0f0f67e6c
 - https://git.kernel.org/stable/c/54b303d8f9702b8ab618c5032fae886b16356928
 - https://git.kernel.org/stable/c/9ab0faa7f9ffe31296dbb9bbe6f76c72c14eea18
 - https://git.kernel.org/stable/c/c9b3fc4f157867e858734e31022ebee8a24f0de7
 - https://git.kernel.org/stable/c/e809a84c802377ef61525a298a1ec1728759b913
 - https://lists.debian.org/debian-lts-announce/2024/10/msg00003.html
 - https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html
 



