코드 삽입

Improper Control of Generation of Code ('Code Injection')

설명

외부 입력값을 받아들여 코드의 구성에 영향을 미치는 경우, 입력값 중 예상치 못한 특수 요소가 포함되어 코드의 동작이 변경될 수 있습니다. 이는 최악의 경우 서버 탈취로 이어질수도 있습니다.

잠재적 영향

  • 보호 메커니즘 우회 (Bypass Protection Mechanism): 잘못된 인증 코드 등에 의하여 원격 보안 취약점이 발생할 수 있음

  • 권한 획득 또는 신분 위장 (Gain Privileges or Assume Identity): 위조된 코드를 통해 직접 접근이 제한된 리소스에 접근할 수 있음

  • 무단 코드 실행 (Execute Unauthorized Code or Commands): 데이터 무결성 및 기밀성의 손실을 유발하며 경우에 따라 임의의 코드 실행 가능성이 있음

해결 방법

  1. 외부 입력값은 항상 신뢰하지 않고 검증해야 합니다. 입력값의 길이 및 형식 등을 사전에 확인하세요.

  2. 명령어 형태로 전달될 수 있는 외부 입력을 직접 사용하지 마세요. 예를 들어 사용자 입력이 포함된 문자열을 코드 빌더에 전달하지 마세요.

  3. 코드 작성 시, 매개 변수화된 API 또는 미리 구성된 명령 구조를 사용하세요.

  4. 신뢰할 수 없는 사용자 입력이 평가나 실행에 영향을 주는 경우 이러한 입력값을 완전히 제거 또는 이스케이프 처리하세요.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 이 코드에서는 사용자의 입력값을 SpelExpressionParser에 그대로 전달하여 사용하기에 코드 주입 공격이 가능하며 예상치 못한 명령어 실행의 위험이 있습니다.

  • 안전한 코드: StandardEvaluationContext를 사용해 사용자 입력값을 저장후 정의된 방식으로 데이터가 처리되도록하여 예상치 못한 명령어 실행되는 것을 방지 합니다.

관련 CVE

참조

Last updated