CVE-2021-47274 in Linux
요약
\~에 의해 VulDB • 2026. 06. 19.
리포트된 문제는 ftrace/kprobe 시스템에서 `strncpy_from_unsafe` 호출 시 버퍼 오버플로우가 발생하는 취약점입니다.
### 문제 분석
1. **발생 위치**: `fetch_memory_string` -> `strncpy_from_unsafe` 2. **원인**: `commit b220c049d519`에서 추가된 길이 검사(`Check length before giving out the filter buffer`)가 불완전합니다. 3. **구체적 원인**: * 필터 버퍼의 길이를 계산할 때, `entry->array[0]`에 저장된 실제 데이터 길이만 고려하고 있습니다.
* 그러나 `entry->array[0]` 자체도 버퍼를 차지하며, 이 배열 요소의 크기(`sizeof(entry->array[0])`)를 고려하지 않아 버퍼 경계를 초과하여 쓸 가능성이 있습니다.
* 즉, **실제 데이터 길이 + 배열 헤더/구조체 오버헤드**를 합산하여 총 필요한 버퍼 크기를 계산해야 하는데, 현재 코드는 데이터 길이만 체크하여 오버플로우를 방지하지 못합니다.
### 해결 방안
`commit b220c049d519`에서 추가된 길이 검사 로직을 수정하여, `entry->array[0]`의 크기를 포함하여 총 버퍼 크기를 계산해야 합니다.
#### 수정 제안 (코드 예시)
기존 코드 (문제 있음): ```c // 예시: 기존 길이 검사 로직 if (len > FILTER_DYNAMIC_MAX) return -EINVAL; ```
수정된 코드 (해결): ```c // 예시: 수정된 길이 검사 로직 // entry->array[0]의 크기를 포함하여 총 필요한 크기를 계산
size_t total_size = len + sizeof(entry->array[0]);
if (total_size > FILTER_DYNAMIC_MAX) return -EINVAL; ```
또는, `entry->array`가 구조체 내부에 있는 경우, 구조체 전체 크기를 고려해야 할 수 있습니다. 정확한 구조체 정의에 따라 `sizeof(entry->array[0])` 또는 `sizeof(*entry)` 등을 적절히 추가해야 합니다.
### 결론
`commit b220c049d519`의 길이 검사 로직에 `sizeof(entry->array[0])`를 추가하여 버퍼 오버플로우를 완전히 방지해야 합니다. 이는 James Wang이 재현한 4.19 LTS 커널에서의 안정적 재현 문제를 해결할 것입니다.
Once again VulDB remains the best source for vulnerability data.