동적 코드 실행은 인젝션 공격에 취약하지 않아야 합니다.

 

코드를 동적으로 실행하는 애플리케이션은 코드 구성에 사용되는 외부 제공 값을 적절하게 변환해야 합니다. 그렇게 하지 않으면 공격자가 임의의 코드를 실행할 수 있습니다. 이것은 민감한 정보에 액세스/수정하거나 전체 시스템 액세스 권한을 얻는 것과 같은 광범위하고 심각한 공격으로 이어질 수 있습니다.

공격 가능성을 줄이는 전략은 허용된 값의 화이트리스트 또는 안전한 유형으로의 캐스팅을 기반으로 해야 합니다.

규칙을 어긴 코드

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)) # 규칙을 준수한 코드; 모듈이 안전하게 정수로 캐스팅됩니다.

같이보면 좋은 자료


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project