[하루한줄] CVE-2024-42370: Litestar의 Environment Variable Injection로 인한 정보 유출 취약점
URL
Target
- Litestar <= 2.10.0
Explain
Litestar는 Python 기반의 ASGI(Asynchronous Server Gateway Interface) 프레임워크로, 비동기 웹 애플리케이션과 API 개발에 사용됩니다.
취약점은 docs-preview.yml
워크플로우에서 발생하며, Environment Variable Injection을 트리거해 정보 유출 및 저장소 공격이 가능합니다.
on:
workflow_run:
workflows: [Tests And Linting]
types: [completed]
Tests And Linting
워크플로우가 완료되면, docs-preview.yml
워크플로우가 실행됩니다.
- name: Download artifact
uses: dawidd6/action-download-artifact@v6
with:
workflow_conclusion: success
run_id: ${{ github.event.workflow_run.id }}
path: docs-preview
name: docs-preview
이때 Tests And Linting
워크플로우에서 생성된 아티팩트를 다운로드하고 압축을 해제합니다.
- name: Set PR number
run: echo "PR_NUMBER=$(cat docs-preview/.pr_number)" >> $GITHUB_ENV
그 후 docs-preview/.pr_number
파일의 내용을 읽어 PR_NUMBER
환경 변수로 설정하고 $GITHUB_ENV
파일에 저장합니다.
$GITHUB_ENV
파일은 GitHub Actions에서 환경 변수를 정의할 때 사용하는 파일로 KEY=VALUE
형식으로 값을 추가하면, GitHub Actions는 새로운 환경 변수로 인식해 사용합니다.
취약점은 .pr_number
파일의 내용을 검증하지 않아 공격자가 .pr_number
파일에 여러 줄을 포함시켜 추가 환경 변수를 생성할 수 있습니다.
111
LD_PRELOAD=/home/runner/work/litestar/litestar/inject.so
공격자는 위와 같이 .pr_number
파일 내용을 작성할 경우 PR_NUMBER
, LD_PRELOAD
두 개의 환경 변수를 생성할 수 있습니다.
따라서 공격자는 LD_PRELOAD
환경 변수를 통해 악성 라이브러리를 로드할 수 있게 됩니다.
- name: Deploy docs preview
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: docs-preview/docs/_build/html
token: ${{ secrets.DOCS_PREVIEW_DEPLOY_TOKEN }}
repository-name: litestar-org/litestar-docs-preview
clean: false
target-folder: ${{ env.PR_NUMBER }}
branch: gh-pages
이후 docs-preview
를 배포하는 과정에서 JamesIves/github-pages-deploy-action
Actions이 실행되고 내부적으로 node 명령어를 사용하기 때문에 공격자 라이브러리를 로드하게 됩니다.
Issues: write
Metadata: read
PullRequests: write
해당 취약점을 통해 공격자는 위와 같은 권한을 얻을 수 있고, DOCS_PREVIEW_DEPLOY_TOKEN
토큰 정보를 유출할 수 있습니다.
해당 취약점은 정규 표현식을 통해 .pr_number
파일 내용이 숫자인지 검증하도록 패치되었습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.