Gh Actions - Context Script Injections

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

기본 정보

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";#는 유효한 브랜치 이름이며 대상 저장소에 대한 가능한 공격 벡터가 될 수 있습니다.

스크립트 삽입 공격 예제

스크립트 삽입 공격은 워크플로우의 인라인 스크립트 내에서 직접 발생할 수 있습니다. 다음 예에서는 액션이 풀 리퀘스트 제목의 유효성을 테스트하기 위해 표현식을 사용하지만 스크립트 삽입의 위험도를 추가합니다:

- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^octocat ]]; then
echo "PR title starts with 'octocat'"
exit 0
else
echo "PR title did not start with 'octocat'"
exit 1
fi

쉘 스크립트가 실행되기 전에 ${{ }} 내부의 표현식이 평가되고 결과 값으로 대체되므로, 이는 쉘 명령어 인젝션에 취약할 수 있습니다.

공격자는 이 워크플로에 명령어를 인젝션하기 위해 제목이 a"; ls $GITHUB_WORKSPACE"인 풀 리퀘스트를 생성할 수 있습니다.

이 예시에서는 " 문자가 title="${{ github.event.pull_request.title }}" 문을 중단시키고, ls 명령어가 실행되도록 합니다.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

最終更新