Gh Actions - Context Script Injections
기본 정보
PR을 생성하는 사용자가 제어하는 특정 github 컨텍스트가 있음을 유의하세요. 만약 github action이 해당 데이터를 실행하는 데 사용한다면, 임의의 코드 실행으로 이어질 수 있습니다. 이러한 컨텍스트는 일반적으로 body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
, ref
, title
로 끝납니다. 예를 들면 (이 글에서 가져온 목록):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
브랜치 이름과 이메일 주소와 같은 덜 명확한 소스도 있으며, 허용되는 내용에 대해 유연할 수 있습니다. 예를 들어, zzz";echo${IFS}"hello";#
는 유효한 브랜치 이름이며 대상 저장소에 대한 가능한 공격 벡터가 될 수 있습니다.
스크립트 삽입 공격 예제
스크립트 삽입 공격은 워크플로우의 인라인 스크립트 내에서 직접 발생할 수 있습니다. 다음 예에서는 액션이 풀 리퀘스트 제목의 유효성을 테스트하기 위해 표현식을 사용하지만 스크립트 삽입의 위험도를 추가합니다:
쉘 스크립트가 실행되기 전에 ${{ }}
내부의 표현식이 평가되고 결과 값으로 대체되므로, 이는 쉘 명령어 인젝션에 취약할 수 있습니다.
공격자는 이 워크플로에 명령어를 인젝션하기 위해 제목이 a"; ls $GITHUB_WORKSPACE"
인 풀 리퀘스트를 생성할 수 있습니다.
이 예시에서는 "
문자가 title=
"${{ github.event.pull_request.title }}"
문을 중단시키고, ls
명령어가 실행되도록 합니다.
Last updated