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.

출처

Do you know our Splunk app?

Download it now for free!