Gh Actions - Context Script Injections

Support HackTricks

Basic Information

ध्यान दें कि कुछ github contexts हैं जिनके मान उपयोगकर्ता द्वारा PR बनाने के द्वारा नियंत्रित होते हैं। यदि github action उस डेटा का उपयोग करके कुछ निष्पादित कर रहा है, तो यह मनमाने कोड निष्पादन की ओर ले जा सकता है। ये संदर्भ आमतौर पर body, default_branch, email, head_ref, label, message, name, page_name,ref, और title के साथ समाप्त होते हैं। उदाहरण के लिए (इस writeup से सूची):

  • 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";# एक मान्य शाखा नाम होगा और एक लक्षित रिपॉजिटरी के लिए एक संभावित हमले का वेक्टर होगा।

Example of a script injection attack

एक स्क्रिप्ट इंजेक्शन हमला सीधे एक वर्कफ़्लो के इनलाइन स्क्रिप्ट के भीतर हो सकता है। निम्नलिखित उदाहरण में, एक क्रिया एक पुल अनुरोध शीर्षक की वैधता का परीक्षण करने के लिए एक अभिव्यक्ति का उपयोग करती है, लेकिन स्क्रिप्ट इंजेक्शन के जोखिम को भी जोड़ती है:

- 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

Before the shell script is run, the expressions inside ${{ }} are evaluated and then substituted with the resulting values, which can make it vulnerable to shell command injection.

इस वर्कफ़्लो में कमांड इंजेक्ट करने के लिए, हमलावर a"; ls $GITHUB_WORKSPACE" शीर्षक के साथ एक पुल अनुरोध बना सकता है।

इस उदाहरण में, " वर्ण title="${{ github.event.pull_request.title }}" कथन को बाधित करने के लिए उपयोग किया जाता है, जिससे ls कमांड को रनर पर निष्पादित किया जा सके।

Support HackTricks

Last updated