Git 커밋 메시지에 코드 삽입? 보안 사고 위험!
Git 커밋 메시지에 코드 diff를 포함하는 행위는 보안 취약점(Security Vulnerability)을 유발할 수 있음
`patch(1)` 및 `git-am(1)`과 같은 도구가 커밋 메시지의 diff를 적용하여 예상치 못한 코드 실행(Unexpected Code Execution)을 초래할 수 있음
커뮤니티에서는 in-band signalling의 위험성을 지적하며, Git의 구문적 모호성(Syntactic Ambiguity) 문제를 제기함
Git의 In-band Signalling 문제점
논의에서는 Git의 in-band signalling 방식이 근본적인 문제라고 지적한다. 특히, Git이 커밋 메시지와 패치를 명확하게 구분하지 못하는 구문적 모호성(Syntactic Ambiguity)으로 인해 코드 인젝션 취약점이 발생할 수 있다고 강조한다. 이는 마치 네트워크 계층에서 헤더와 페이로드를 동일 채널로 전송하는 것과 유사하며, 경계가 불분명할 경우 문제가 발생할 수 있다는 것이다. 데이터 격리 아키텍처(Data Isolation Architecture) 부재가 문제의 핵심으로 지적된다.
코드 인젝션의 실제 사례 분석
Debian unstable 버전의 i3 4.25-2에서 발생한 sleep(1) 함수 삽입 사건을 예시로 들며, 실제 코드 인젝션의 위험성을 보여준다. 이 사건은 Git 커밋 메시지에 포함된 패치 조각이 `patch(1)`에 의해 실행되면서 발생했다. 이는 개발자가 커밋 메시지에 코드 조각을 포함할 때, 보안 검증(Security Validation) 없이 코드가 실행될 수 있음을 시사한다. 멀티모달 분석(Multimodal Analysis) 부재가 문제의 원인으로 지적된다.
커밋 메시지 내 패치 조각 사용의 위험성
커뮤니티에서는 커밋 메시지에 전체 diff를 포함하는 행위는 물론, 일부 코드 조각을 포함하는 것조차 위험하다고 경고한다. 특히, race condition을 해결하기 위해 sleep 함수를 추가하는 등의 임시 방편(Temporary Solution)이 보안 취약점으로 이어질 수 있음을 강조한다. 따라서, 커밋 메시지에는 코드 조각 대신 문제 해결의 핵심 내용(Core Issue)만 간결하게 포함하고, 코드 변경 사항은 별도의 패치 파일로 관리하는 것이 권장된다.