← All issues

[4] Fix .note.gnu.property section emission on non-ELF platforms

Severity: Low | Component: boringssl ARM64 assembly (via libwebrtc) | 216bff7

관측 가능한 영향이 malformed Mach-O section으로 인한 시스템 진단 도구(ktrace/libtrace) crash에 국한되며, 원격으로 유발 가능한 code execution에 대한 commit 수준의 근거가 없습니다. code signing이나 loader 간섭으로의 이론적 확장은 추측 수준에 머물며, Apple의 binary validation pipeline에 의해 차단됩니다. 이러한 이유로 Low로 평가합니다.

Bug 303938에서 ARM64 어셈블리 파일에 -mbranch-protection=pac-ret+b-key 플래그를 추가하여 boringssl에 PAC(return address signing)를 활성화했습니다. 이로 인해 모든 플랫폼에서 .note.gnu.property section이 생성되었는데, Apple/Mach-O 대상에서는 이 section이 유효하지 않아 ktrace/libtrace crash를 유발했습니다. 이번 fix에서는 && defined(__ELF__) 조건이 추가되었습니다.

Source/ThirdParty/libwebrtc/Source/third_party/boringssl/src/include/openssl/asm_base.h

-#if GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_BTI != 0
+#if (GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_BTI != 0) && defined(__ELF__)
.pushsection .note.gnu.property, "a";
.balign 8;
.long 4;

단 한 줄의 수정입니다. boringssl의 asm_base.h에서 .note.gnu.property section 생성을 제어하는 조건에 defined(__ELF__)가 추가되었습니다. 기존의 PAC/BTI 기능 확인에 더해 이 조건이 요구됩니다. 결과적으로 ELF 전용 메타데이터 section이 실제로 ELF binary format을 사용하는 플랫폼에서만 생성되도록 제한되었습니다.

Cross-platform assembly header의 ELF 전용 section 생성에 platform guard가 누락된 패턴.

.note.gnu.property section은 Linux/GNU 대상에서 사용되는 ELF 메타데이터 메커니즘입니다. 컴파일된 코드가 지원하는 하드웨어 보안 기능(PAC, BTI)을 알리는 용도로 쓰입니다. ELF 플랫폼의 linker와 loader는 이 section을 읽어 기능 호환성을 검증합니다. 한편 Apple의 binary format인 Mach-O에는 이에 해당하는 section이 없으며, .note.gnu.property 데이터가 존재하면 malformed object file이 생성됩니다. __ELF__ 전처리기 매크로는 ELF 플랫폼을 대상으로 컴파일할 때만 컴파일러가 정의하며, ELF 전용 어셈블리 디렉티브를 위한 표준 guard 역할을 합니다.

boringssl의 ARM64 어셈블리 빌드에 -mbranch-protection=pac-ret+b-key가 추가되면서 __ARM_FEATURE_PAC_DEFAULT가 정의되었고, GNU_PROPERTY_AARCH64_POINTER_AUTH가 0이 아닌 값으로 설정되었습니다. 당시 .note.gnu.property 생성을 제어하는 조건은 PAC 또는 BTI 기능의 활성화 여부만 확인했을 뿐, 대상 format이 ELF인지는 검증하지 않았습니다. 그 결과 생성된 Mach-O object에는 유효하지 않은 section이 포함되었고, 해당 binary를 처리하는 ktrace/libtrace에서 crash가 발생했습니다.

같은 파일 내 앞부분에서는 .note.GNU-stack에 대해 이미 올바른 #if defined(__ELF__) guard가 적용되어 있었습니다. 그러나 PAC/BTI를 위해 뒤에 추가된 .note.gnu.property 블록에는 동일한 패턴이 적용되지 않았습니다. 보안 강화 플래그를 활성화하는 과정에서 발생한 단순 누락으로 볼 수 있습니다.

🔒

Explores the downstream impact of malformed object sections on Apple platform tooling and binary integrity

더 확인하려면 구독해 주세요

🔒

Actionable audit patterns for cross-platform assembly hardening flags, with specific search targets across WebKit's third-party dependencies

더 확인하려면 구독해 주세요