La próxima versión del kernel Linux, la 7.2, incluirá la bandera OPENAT2_REGULAR para la llamada al sistema openat2. Esta funcionalidad permite a los programas asegurarse de que solo abren archivos regulares, evitando que sean redirigidos a dispositivos especiales como /dev/null o FIFOs, que pueden provocar comportamientos de bloqueo inesperados y vulnerabilidades de seguridad.
Cómo funciona OPENAT2_REGULAR en el kernel 🛡️
La bandera OPENAT2_REGULAR actúa como un filtro en la llamada openat2. Cuando se activa, el kernel verifica que el archivo destino sea de tipo regular (S_IFREG) antes de permitir la apertura. Si el archivo es un dispositivo de bloque, un FIFO o un socket, la operación falla con el error EISDIR o EPERM. Esta verificación ocurre después de resolver enlaces simbólicos, cerrando el paso a ataques que usan enlaces para apuntar a dispositivos especiales. La implementación fue solicitada por el grupo UAPI para proteger aplicaciones que procesan archivos de usuario.
Adiós a los sustos con /dev/null y los FIFOs traviesos 😅
Hasta ahora, un programa confiado podía abrir un archivo y encontrarse con que era un FIFO que lo dejaba esperando datos para siempre, o peor, un /dev/null que tragaba toda su salida sin chistar. Con OPENAT2_REGULAR, esos sustos se acaban: si el archivo no es regular, el kernel dice no y el desarrollador se ahorra horas de depuración. Es como ponerle un filtro a la entrada de la disco para que solo pasen archivos de verdad, no disfraces de carnaval.