🇰🇷 한글 설명
setuid() 호출 전에 초기화된 libuv의 io_uring 작업은 권한 드롭에 영향을 받지 않아 실제 권한 포기가 작동하지 않습니다. 프로세스가 보안 제한을 우회하여 여전히 권한 있는 작업을 수행할 수 있게 됩니다. Node.js 18.18.0, 20.4.0, 21 버전 이상이 영향을 받습니다.
💡 쉬운 설명
Node.js 애플리케이션이 권한을 포기하려고 해도 내부적으로 높은 권한이 유지되는 문제입니다. 이는 보안이 낮아진 사용자 권한으로 실행되는 프로세스가 관리자 권한 작업을 할 수 있게 합니다.
🇺🇸 원문 (English)
setuid() does not affect libuv's internal io_uring operations if initialized before the call to setuid().
This allows the process to perform privileged operations despite presumably having dropped such privileges through a call to setuid().
This vulnerability affects all users using version greater or equal than Node.js 18.18.0, Node.js 20.4.0 and Node.js 21.
📍 영향받는 시스템
Node.js v18.18.0+, v20.4.0+, v21 (모든 이후 버전)
⚔️ 공격 벡터
setuid() 호출로 권한 강등 후 libuv io_uring 인터페이스를 통한 권한 있는 작업 수행
🛡️ 대응 방법
Node.js를 패치된 버전으로 업데이트하거나 io_uring 사용 비활성화 필요
🔧 검증 코드
Node.js 버전이 18.18.0 이상, 20.4.0 이상, 또는 21 이상이면 'Vulnerable'이 출력되므로 즉시 업데이트 필요
node --version | awk -F'[v.]' '{if(($2==18 && $3>=18) || ($2==20 && $3>=4) || $2>=21) print "Vulnerable"; else print "Safe"}'