1. 주석문 내 정보 노출의 위험성
CWE-615는 소스 코드 내의 주석문에 시스템의 구조, 관리자 정보, 비밀번호, 테스트용 계정, 또는 비즈니스 로직의 약점 등을 기록해 두었을 때 발생합니다. 서버 측 코드(Java 등)의 주석은 컴파일 후 사용자에게 보이지 않지만, 형상 관리 시스템(Git)의 노출, 백업 파일 유출, 혹은 클라이언트 측 코드(HTML, JS, JSP)에 남겨진 주석을 통해 외부로 드러날 수 있습니다. 공격자는 이 주석들을 수집하여 시스템의 설계를 파악하고, 공격 경로를 설정하는 결정적인 힌트로 사용합니다.
2. 흔히 발생하는 취약한 패턴
개발 단계에서 디버깅이나 협업을 위해 무심코 남긴 메모들이 주요 타깃이 됩니다.
• 인증 정보 노출: // TODO: 테스트 후 관리자 비번(admin1234) 삭제할 것과 같은 계정 정보.
• 내부 IP 및 인프라 구조: // DB 접속 안 될 경우 192.168.0.15 서버 확인할 것 등의 내부망 정보.
• 미구현/취약점 고백: // 이 부분은 보안 검증 로직이 빠져있음. 나중에 보완 필요와 같은 취약 지점 안내.
• JSP/HTML 내 상세 로직: 브라우저의 '소스 보기'로 누구나 볼 수 있는 위치에 남겨진 SQL 쿼리나 상세 로직 설명.
3. 실무적 대응: 주석 관리 표준 수립과 자동화 검사
운영 환경에 배포되는 코드에는 오직 기능 설명에 필요한 최소한의 주석만 남겨야 합니다.
• 민감 정보 기록 금지: 비밀번호, API 키, 상세 인프라 정보는 절대 주석에 적지 않습니다.
• 배포 전 주석 제거: 특히 HTML, JavaScript, JSP 파일의 경우 빌드/배포 프로세스에서 주석을 자동으로 제거하는 Minifier 도구를 사용합니다.
• 서블릿/JSP 엔진 설정: JSP 주석(<%-- --%>)은 클라이언트에 전송되지 않지만, HTML 주석(``)은 그대로 전달되므로 용도에 맞게 구분하여 사용합니다.
• 정적 분석 도구 활용: SonarQube 등 정적 분석 도구의 규칙을 활용하여 민감한 단어(password, ip, login 등)가 포함된 주석을 사전에 탐지합니다.
4. CWE-615 대응 및 안전한 주석 관리 자바/JSP 예시
JSP에서의 주석 구분:
코멘트: 주석은 개발자의 일기장이 아닙니다. 공격자에게 시스템의 지도를 그려주는 행위와 같습니다. 특히 "나중에 고쳐야지" 하며 남겨둔 주석이 수년 뒤 공격자의 입구가 될 수 있음을 명심하십시오. logger.debug()를 통해 로직의 흐름은 기록하되, 주석문 속에는 오직 '코드가 무엇을 하는지'에 대한 순수한 기능 설명만 담는 것이 진정한 시큐어 코딩의 프로페셔널리즘입니다.
댓글 달기