코드를 동적으로 실행하는 애플리케이션은 코드 구성에 사용되는 외부 제공 값을 적절하게 변환해야 합니다. 그렇게 하지 않으면 공격자가 임의의 코드를 실행할 수 있습니다. 이것은 민감한 정보에 액세스/수정하거나 전체 시스템 액세스 권한을 얻는 것과 같은 광범위하고 심각한 공격으로 이어질 수 있습니다.
공격 가능성을 줄이는 전략은 허용된 값의 화이트리스트 또는 안전한 유형으로의 캐스팅을 기반으로 해야 합니다.
규칙을 어긴 코드
from flask import request
@app.route('/')
def index():
module = request.args.get("module")
exec("import urllib%s as urllib" % module) # 규칙을 어긴 코드
규칙을 준수한 해결책
from flask import request
@app.route('/')
def index():
module = request.args.get("module")
exec("import urllib%d as urllib" % int(module)) # 규칙을 준수한 코드; 모듈이 안전하게 정수로 캐스팅됩니다.
같이보면 좋은 자료
- OWASP Top 10 2021 Category A3 - 인젝션
- OWASP Top 10 2017 Category A1 - 인젝션
- MITRE, CWE-20 - 부적절한 입력 검증
- MITRE, CWE-95 - 동적으로 생성되어 수행되는 명령어 삽입(‘Eval Injection’)
- SANS Top 25 - 위험한 리소스 관리
If you like SONARKUBE, don’t forget to give me a star.