Gh Actions - Context Script Injections
मूलभूत जानकारी
ध्यान दें कि कुछ github contexts हैं जिनके मान उपयोगकर्ता द्वारा नियंत्रित होते हैं जो PR बनाने वाले उपयोगकर्ता द्वारा निर्मित होते हैं। यदि github action उस डेटा का उपयोग करके कुछ भी निष्पादित करता है, तो इससे अनियंत्रित कोड निष्पादन हो सकता है। इन contexts का आमतौर पर अंत होता है 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