로그 인젝션

로그 인젝션

설명

사용자 입력을 개행 문자 중립화 없이 로그에 기록하면 공격자가 가짜 로그 라인을 삽입하거나 로그 분석을 혼동시킬 수 있습니다.

잠재적 영향

  • 침해 사고 분석과 탐지가 어려워질 수 있습니다.
  • HTML 로그 뷰어가 입력을 HTML로 해석하면 후속 XSS 위험으로 이어질 수 있습니다.

해결 방법

  • 로그 기록 전 \r, \n을 제거하거나 로그 형식에 맞게 인코딩하세요.
  • 사용자 입력 원문 대신 정규화된 값이나 식별자를 기록하세요.

예시

변경 전

go
user := r.FormValue("user")
log.Printf("user=%s", user)

변경 후

go
user := strings.ReplaceAll(r.FormValue("user"), "\n", "")
user = strings.ReplaceAll(user, "\r", "")
log.Printf("user=%s", user)

설명:

  • 변경 전: 사용자 입력을 개행 문자나 HTML 중립화 없이 로그에 기록하면 공격자가 가짜 로그 라인을 삽입하거나 로그 뷰어를 혼동시킬 수 있습니다.
  • 변경 후: 예시는 \r, \n을 제거해 줄 단위 위조를 줄입니다. HTML 인코딩은 수행하지 않으므로 웹 로그 뷰어의 출력 컨텍스트에 맞는 별도 처리가 필요합니다.

참조