-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
Description
ff/base64_ffi.rs 의 몇 가지 함수는 다음과 같이 c언어의 void* 기반 불투명 포인터를 전달하고 있음
pub unsafe extern "C" fn entlib_b64_encode_secure(
input_ptr: *const u8,
input_len: usize,
out_len: *mut usize,
) -> *mut c_void { ... }
pub unsafe extern "C" fn entlib_b64_decode_secure(
input_ptr: *const u8,
input_len: usize,
out_len: *mut usize,
err_flag: *mut u8,
) -> *mut c_void { ... }Rust 기반의 FFI 환경에선 위 방식이 적절하지 않음을 발견함. *mut c_void를 사용하면 포인터가 가리키는 실제 데이터의 타입 정보가 소실되고, 이 이유로 인해 해제 함수인 entlib_free_secure_buffer나 데이터 접근 함수에 전혀 다른 구조체의 포인터가 전달되더라도 런타임 캐스팅을 수행하기 전까지 러스트 컴파일러가 이를 차단하지 못함.
근데 일단 그 전에 왜 base64 모듈에 보안-소거 함수가 존재하는지 의문이긴 한데, 어찌됐던 위 사항은 명명백백한 보안 취약점이라고 할 수도 있음. 해당 함수들은 SecureBuffer 구조체를 반환하도록 수정되어야 함
Reactions are currently unavailable