커뮤니티Hacker News보안/프라이버시
sshole
1980년대 Unix의 /etc/passwd 파일에서 비밀번호가 없는 계정을 나타내기 위해 사용된 '*' 문자가 현대의 보안 취약점으로 이어지는 과정을 설명합니다. 과거에는 crypt() 함수가 오류 발생 시 NULL을 반환했으나, 현대의 musl libc와 같은 라이브러리는 프로그램 충돌을 방지하기 위해 NULL 대신 '*' 문자를 반환하도록 설계되었습니다. 이로 인해 시스템에 저장된 비밀번호가 '*'인 계정의 경우, 암호화 함수가 오류를 반환하더라도 그것이 유효한 비밀번호로 인식되어 인증을 통과하는 보안 구멍이 발생합니다.
커뮤니티에서는 이렇게 봤습니다
특수 문자를 제어 신호로 사용하는 'In-band signaling' 방식이 보안상 위험하다는 비판과, 시스템 안정성을 위해 NULL 대신 특정 값을 반환하는 설계가 의도치 않은 취약점을 만들었다는 기술적 쟁점이 대립합니다.
주요 내용
-
과거의 관습적인 특수 문자 '*'가 현대 라이브러리의 오류 처리 로직과 충돌하며 보안 취약점을 유발합니다.
-
crypt() 함수가 오류 시 NULL을 반환하던 방식이 현대적 라이브러리에서 '*'로 대체되며 인증 우회 가능성이 생겼습니다.
-
데이터 값과 제어 신호를 동일한 채널에서 사용하는 설계 방식은 예기치 못한 보안 허점을 만들 수 있습니다.