ProcessStartInfo와 Command Injection 리스크

한 때 많은 조명을 받았던 SQL Injection 보안 이슈에 대해 기억하고 계신 분들이 많을 것 같습니다. 값 이외에 다른 추가 명령문의 삽입을 허용하는 보안 문제로, 쿼리 문자열에 값을 직접 string concatenation으로 더하려고 할 때 쉽게 일어나곤 했죠.

비슷한 리스크가 System.Diagnostics.ProcessStartInfo에서도 발생할 개연성이 있어서 정보를 공유해봅니다.

애플리케이션에 매개 변수를 전달할 때, 편의 상 Arguments 속성에 모든 문자열 완성해서 집어넣는 경우가 많습니다. 그런데 여기에 string concatenation 방식으로 외부 인자를 받아들이게 할 경우 command injection 보안 리스크가 발생할 수 있습니다.

그래서 Arguments 대신 ArgumentList를 사용할 것을 추천하는데, ArgumentList에 들어오는 모든 값은 OS의 명령어 처리기 기준에 맞게 최종 전달될 인자 목록에서 이스케이프 처리가 필요한 문자가 적절하게 처리되므로 이런 리스크가 감소하게 됩니다.

다만 Arguments와 ArgumentList는 섞어 쓸 수 없고, 둘 중 하나만 써야 합니다.

7개의 좋아요

문서에도 쓰여져 있지만. ArgumentList라고 해서 반드시 신뢰 가능한 것도 아닙니다.

가능하면 입력을 Encode / Escape 하거나 검증된 입력만 받는게 좋습니다.

2개의 좋아요

다른 얘기이긴 한데 Injection 하니까 생각나서 공유 드립니다.

프롬프트 인젝션 공격이란 무엇인가요? | IBM

2개의 좋아요