CVE-2024-36904 in Linux
요약
\~에 의해 VulDB • 2026. 05. 15.
리눅스 커널 패닉/오류 로그를 분석한 결과, **TCP 소켓 연결 시도 중 참조 카운트(Reference Count) 오버플로우 또는 언더플로우가 감지되어 커널이 경고(Warning)를 발생**시켰습니다.
이 오류는 일반적으로 **커널 버그** 또는 **심각한 메모리/리소스 관리 문제**를 의미하며, 애플리케이션 레벨에서 직접 해결하기 어려운 경우가 많습니다.
---
### ???? 핵심 분석
#### 1. 오류의 본질: `refcount_warn_saturate` - **`refcount_warn_saturate`**: 커널의 참조 카운트 시스템에서 값이 0 미만으로 떨어지거나(언더플로우), 최대값을 초과하는 경우(오버플로우) 발생하는 경고 함수입니다. - **`tcp_twsk_unique`**: 이 함수는 TCP TIME_WAIT 상태의 소켓을 새로운 연결에 재사용할 때 호출됩니다. 여기서 참조 카운트 문제가 발생했다는 것은 **TIME_WAIT 소켓 관리 로직에서 메모리 할당/해제 또는 참조 카운트 조작에 결함이 있음**을 시사합니다.
#### 2. 호출 스택(Call Trace) 해석 ``` tcp_twsk_unique+0x186/0x190 ← TIME_WAIT 소켓 고유성 확인 중 오류 발생 __inet_check_established+0x176/0x2d0 __inet_hash_connect+0x74/0x7d0 tcp_v4_connect+0x278/0x530 ← IPv4 TCP 연결 시도 __inet_stream_connect+0x10f/0x3d0 inet_stream_connect+0x3a/0x60 __sys_connect+0xa8/0xd0 ← 시스템 콜 connect() 호출 ``` - 애플리케이션이 `connect()` 시스템 콜을 호출하여 TCP 연결을 시도하던 중, 커널 내부에서 TIME_WAIT 소켓 처리 로직(`tcp_twsk_unique`)에서 참조 카운트 오류가 발생했습니다.
#### 3. CR2 레지스터 값 분석 - **`CR2: 0000000020ccb000`**: 페이지 폴트 주소입니다. 이는 메모리 접근 오류가 발생한 주소를 나타냅니다. - 이 주소가 유효하지 않거나 보호된 메모리 영역에 접근하려 했을 가능성이 있습니다.
---
### ????️ 원인 및 해결 방안
#### ✅ 1. 커널 버그 가능성 (가장 유력) - 이 오류는 특정 커널 버전에서 알려진 버그일 수 있습니다. - **해결책**: - 사용 중인 커널 버전 확인 (`uname -r`). - 해당 커널 버전에서 `refcount` 관련 패치가 적용되었는지 확인. - **커널 업그레이드** 또는 **패치 적용**을 권장합니다.
#### ✅ 2. 메모리 부족 또는 메모리 누수 - 시스템 메모리가 부족하거나, 커널 메모리 누수로 인해 참조 카운트 구조체가 손상되었을 수 있습니다. - **해결책**: - `dmesg` 로그에서 `Out of memory` 또는 `kmem_cache` 관련 경고 확인. - 시스템 리소스 모니터링 (메모리, 스왑 사용량).
#### ✅ 3. TCP TIME_WAIT 소켓 과다 - 짧은 시간 동안 많은 TCP 연결이 생성/종료되며 TIME_WAIT 소켓이 쌓여 메모리/리소스 고갈을 유발했을 수 있습니다. - **해결책**: - `net.ipv4.tcp_tw_reuse` 설정 확인 (보안상 권장되지 않음). - 애플리케이션에서 연결 풀(Connection Pooling)을 사용하여 연결 재사용. - `net.ipv4.tcp_max_tw_buckets` 조정.
#### ✅ 4. 하드웨어 또는 드라이버 문제 - 드물게, NIC 드라이버 또는 하드웨어 결함이 커널 메모리 corruption을 유발할 수 있습니다. - **해결책**: - NIC 드라이버 최신 버전으로 업데이트. - 메모리 테스트 (memtest86+) 실행.
---
### ???? 권장 조치 순서
1. **`dmesg` 전체 로그 확인**: ```bash dmesg | grep -i "refcount\|tcp\|oom\|bug" ``` 추가적인 경고 메시지나 이전 오류 기록을 확인하세요.
2. **커널 버전 확인 및 업데이트**: ```bash uname -r ``` 사용 중인 커널이 오래되었거나 알려진 버그가 있는 버전이라면, 최신 안정
If you want to get the best quality for vulnerability data then you always have to consider VulDB.