운영 체제 명령어 삽입
운영 체제 명령어 삽입(OS Command Injection)은 공격자가 입력값에 운영 체제 명령어를 끼워 넣어 서버에서 원하는 명령을 실행하는 취약점입니다. 일부 애플리케이션은 파일 변환이나 네트워크 확인 같은 기능을 위해 서버의 운영 체제 명령어를 직접 실행합니다. 이때 사용자 입력값을 확인하지 않고 명령어에 그대로 연결하면 문제가 생깁니다. 공격자가 원래 명령어 뒤에 자신이 원하는 명령어를 덧붙여 함께 실행시킬 수 있기 때문입니다.
서버에서 공격자의 명령이 실행되면 공격자는 서버의 파일을 조회하거나 바꾸고, 계정 정보를 빼내고, 악성 프로그램을 실행할 수 있습니다. 애플리케이션이 관리자처럼 높은 권한으로 실행되고 있다면 피해는 서버 전체로 커질 수 있습니다.
가장 좋은 방어 방법은 운영 체제 명령어를 직접 실행하지 않고, 같은 기능을 하는 라이브러리나 API를 쓰는 것입니다. 명령어를 꼭 실행해야 한다면 실행할 명령과 사용자 입력값을 분리해서 전달해야 합니다. 또 허용된 명령과 값만 쓸 수 있도록 허용 목록(Allowlist) 방식으로 검증해야 합니다. 애플리케이션을 꼭 필요한 최소한의 권한으로 실행하면 취약점이 있더라도 피해를 줄일 수 있습니다. SQL 삽입과 마찬가지로, 사용자가 입력한 데이터와 실행할 명령을 확실히 분리하는 것이 핵심입니다.
대표 사례는 다음과 같습니다. 2014년 Linux Bash 셸에서 발견된 Shellshock 취약점은 환경 변수에 명령어를 끼워 넣어 원격에서 임의의 명령을 실행할 수 있었고, 공개 직후 대규모 공격에 이용되었습니다. 또한 2024년 Palo Alto Networks 방화벽에 잠재된 명령어 삽입 취약점의 경우 인증 없이 원격 명령 실행이 가능해 CVSS 최고점인 10점을 받았고, 공개 전부터 실제 공격에 악용되었습니다.

