🇰🇷 한글 설명
Linux 커널의 BPF 검증기(Verifier)에서 확장 프로그램이 기존의 글로벌 서브 프로그램을 대체할 때, 패킷 데이터 변경 속성(changes_pkt_data)의 호환성을 제대로 확인하지 않는 취약점입니다. 이로 인해 프로그램 간의 속성 불일치가 발생하여 커널의 안정성이나 보안 검증 로직에 문제가 생길 수 있습니다.
💡 쉬운 설명
리눅스 커널이 프로그램을 교체할 때, 새 프로그램이 기존 프로그램의 규칙을 잘 따르는지 확인하는 과정에 허점이 있었습니다. 이 허점을 이용하면 시스템의 보안 규칙을 우회하거나 예상치 못한 동작을 유발할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: check changes_pkt_data property for extension programs
When processing calls to global sub-programs, verifier decides whether
to invalidate all packet pointers in current state depending on the
changes_pkt_data property of the global sub-program.
Because of this, an extension program replacing a global sub-program
must be compatible with changes_pkt_data property of the sub-program
being replaced.
This commit:
- adds changes_pkt_data flag to struct bpf_prog_aux:
- this flag is set in check_cfg() for main sub-program;
- in jit_subprogs() for other sub-programs;
- modifies bpf_check_attach_btf_id() to check changes_pkt_data flag;
- moves call to check_attach_btf_id() after the call to check_cfg(),
because it needs changes_pkt_data flag to be set:
bpf_check:
... ...
- check_attach_btf_id resolve_pseudo_ldimm64
resolve_pseudo_ldimm64 --> bpf_prog_is_offloaded
bpf_prog_is_offloaded check_cfg
check_cfg + check_attach_btf_id
... ...
The following fields are set by check_attach_btf_id():
- env->ops
- prog->aux->attach_btf_trace
- prog->aux->attach_func_name
- prog->aux->attach_func_proto
- prog->aux->dst_trampoline
- prog->aux->mod
- prog->aux->saved_dst_attach_type
- prog->aux->saved_dst_prog_type
- prog->expected_attach_type
Neither of these fields are used by resolve_pseudo_ldimm64() or
bpf_prog_offload_verifier_prep() (for netronome and netdevsim
drivers), so the reordering is safe.
📍 영향받는 시스템
Linux Kernel (BPF 기능이 활성화된 버전)
⚔️ 공격 벡터
권한이 있는 사용자가 호환되지 않는 BPF 확장 프로그램을 로드하여 커널 검증기를 우회함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.