യഥാർത്ഥ ആക്രമണത്തിനു ശേഷം ഗിറ്റ്ഹബ് പ്രവർത്തനങ്ങൾ പൂട്ടുന്നു
ഒരു അപഹാസ്യമായ പ്രവര് ത്തനം ആയിരക്കണക്കിന് റെ റിപ്പോകളില് നിന്നും രഹസ്യങ്ങള് ചോര് ന്നു. എന് റെ കാര്യത്തില് ഞാന് എന്തെല്ലാം മാറ്റങ്ങള് വരുത്തി.
ഒരു അപഹാസ്യമായ പ്രവര് ത്തനം ആയിരക്കണക്കിന് റെ റിപ്പോകളില് നിന്നും രഹസ്യങ്ങള് ചോര് ന്നു. എന് റെ കാര്യത്തില് ഞാന് എന്തെല്ലാം മാറ്റങ്ങള് വരുത്തി.

വളരെക്കാലം ഞാൻ ഗിറ്റ്ഹബ് ആക്ഷനുകളുടെ വർക്ക്ഫ്ലോകളെ പൈപ്പ് ലൈൻ ആയി കണക്കാക്കി. ഒരു README ൽ നിന്നും വർക്ക്ഫ്ലോ പകർത്തുക, ചേർക്കുക uses: some-org/some-action@v3, മുന്നോട്ട് പോകുക. നമ്മളിൽ മിക്കവരും അങ്ങനെ ചെയ്തിട്ടുണ്ട്.
2025 മാർച്ചില് ജനപ്രിയമായ tj-actions/changed-files ആക്ഷന് ഹാക്ക് ചെയ്യപ്പെട്ടു. ആക്രമണകാരികൾ അതിന്റെ പതിപ്പ് ടാഗ് മാറ്റി, അത് കോഡ് കാണിച്ചു, അത് ഐ. ഐ രഹസ്യങ്ങൾ ബിൽഡ് ലോഗുകളിലേക്ക് ചോർത്തുന്നു. ആയിരക്കണക്കിന് റിപ്പോകൾ അത് ഉപയോഗിച്ചു. പലതിലും പൊതു രേഖകളുണ്ടായിരുന്നു. ഇത് ഒരു ഉണർവ്വിനുള്ള വിളിയായിരുന്നു. ഞങ്ങളുടെ പൈപ്പ്ലൈനുകൾക്ക് മൂന്നാം കക്ഷി കോഡുകൾ ഉണ്ട്, ഞങ്ങളുടെ ഏറ്റവും സെൻസിറ്റീവ് ക്രെഡൻഷ്യലുകളിലേക്ക് പ്രവേശനം ഉണ്ട്, ഞങ്ങൾ അതിനെക്കുറിച്ച് വളരെ അപൂർവ്വമായി ചിന്തിക്കുന്നു.
ഇതാ ഞാൻ മാറ്റിയത്, ആക്ഷനുകൾ ഉപയോഗിക്കുന്ന ആർക്കും ഞാൻ ശുപാർശ ചെയ്യുന്നത്.
നീ എഴുതിയാൽ uses: tj-actions/changed-files@v45, v45 ഒരു ഗിറ്റ് ടാഗ് ആണ്. ടാഗ് നീക്കാൻ കഴിയും. ആക്രമണകാരിക്ക് ആക്ഷന്റെ റിപ്പോസിറ്ററിയിൽ എഴുതാനുള്ള ആക്സസ് ലഭിച്ചാൽ, നിലവിലുള്ള ടാഗുകൾ ഒരു ക്ഷുദ്രകരമായ കമിറ്റിലേക്ക് നയിക്കാൻ കഴിയും. ആ ടാഗ് ഉപയോഗിക്കുന്ന ഓരോ വർക്ക്ഫ്ലോയും പുതിയ കോഡ് അതിന്റെ അടുത്ത റണ്ണിൽ പ്രവർത്തിപ്പിക്കുന്നു, നിങ്ങളുടെ റിപ്പോസിറ്ററിയിൽ മാറ്റങ്ങളൊന്നും വരുത്താതെ.
പിന്നീട് അന്വേഷണം നടത്തിയപ്പോൾ ഹാക്ക് മറ്റൊരു ഹാക്ക് ആക്ഷനുമായി ബന്ധപ്പെട്ടതാണെന്ന് കണ്ടെത്തി. വിതരണ ശൃംഖല ആക്രമണ ശൃംഖല.
നിങ്ങളുടെ പൈപ്പ് ലൈനിന് അത്രമാത്രം വിശ്വാസ്യതയുണ്ട് അത് പ്രവർത്തിപ്പിക്കുന്ന ഏറ്റവും കുറഞ്ഞ വിശ്വാസ്യതയുള്ള പ്രവർത്തനം.
ഒരു ടാഗിന് പകരം, കൃത്യമായ commit റഫറൻസ് ചെയ്യുക:
# Before
- uses: actions/checkout@v4
# After
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
ഒരു കംപൈറ്റ് ഷാ നീക്കാൻ കഴിയില്ല. ഈ പതിപ്പ് ഒരു കമന്റായി സൂക്ഷിക്കുക, അങ്ങനെ മനുഷ്യർക്ക് അത് വായിക്കാൻ കഴിയും, ആശ്രിതൻ അല്ലെങ്കില് പുതുക്കുക പുതിയ പതിപ്പ് പുറത്തിറങ്ങുമ്പോൾ SHA (അല്ലെങ്കിൽ കമന്റ്) അപ്ഡേറ്റ് ചെയ്യുക, സാധാരണ pull request വഴി നിങ്ങൾക്ക് അവലോകനം ചെയ്യാം.
ഗിറ്റ്ഹബ് സംഘടനകളെ അവരുടെ അനുവദനീയമായ പ്രവർത്തന നയത്തിൽ SHA പിൻ ചെയ്യാനും അനുവദിക്കുന്നു, അതിനാൽ പിൻ ചെയ്യാത്ത പ്രവർത്തനങ്ങൾ പരാജയപ്പെടുന്നു.
ഓരോ വർക്ക്ഫ്ലോയും ഒരു ഓട്ടോമാറ്റിക് GITHUB_TOKEN. അതിന്റെ സ്ഥിര അനുമതികൾ നിങ്ങളുടെ ക്രമീകരണങ്ങളെ ആശ്രയിച്ചിരിക്കുന്നു, പഴയ റിപ്പോസിറ്ററികളിൽ അവ പലപ്പോഴും വളരെ വിശാലമാണ്.
സംഘടന അല്ലെങ്കിൽ റിപ്പോസിറ്ററി സ്ഥിരസ്ഥിതി വായന മാത്രം ആയി സജ്ജമാക്കുക, ഓരോ വർക്ക്ഫ്ലോയ്ക്കും ആവശ്യമുള്ളത് മാത്രം അനുവദിക്കുക:
permissions:
contents: read
jobs:
release:
permissions:
contents: write # only this job can push tags
ഒരു ചോർന്ന വായന-മാത്രം ടോക്കൺ ഒരു ചോർന്ന എഴുതൽ ടോക്കണിനേക്കാൾ വളരെ ചെറിയ പ്രശ്നമാണ്.
ഈ ആക്രമണങ്ങളിൽ ചോർന്ന രഹസ്യങ്ങൾ പലപ്പോഴും ക്ലൌഡ് ആക്സസ് കീകളായിരുന്നു. ആരെങ്കിലും അവയെ മാറ്റുന്നതുവരെ അവ സാധുതയുള്ളവയാണ്. പകരം ഒഐഡിസി: വർക്ക്ഫ്ലോ ഒരു ഹ്രസ്വകാല ടോക്കൺ ഗിറ്റ്ഹബിൽ നിന്നും ആവശ്യപ്പെടുന്നു, നിങ്ങളുടെ ക്ലൌഡ് പ്രൊവൈഡർ അത് താൽക്കാലിക ക്രെഡൻഷ്യലുകൾക്ക് കൈമാറ്റം ചെയ്യുന്നു, പക്ഷേ നിങ്ങൾ അനുവദിക്കുന്ന പ്രത്യേക റിപ്പോസിറ്ററി, ബ്രാഞ്ച് എന്നിവയ്ക്കായി മാത്രം.
permissions:
id-token: write
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@<sha> # v4
with:
role-to-assume: arn:aws:iam::123456789012:role/deploy-shop
aws-region: eu-central-1
AWS, Azure, ഗൂഗിൾ ക്ലൌഡ്, ഹാഷി കോർപ് വോൾട്ട് തുടങ്ങിയവയെല്ലാം ഇതിനെ പിന്തുണയ്ക്കുന്നു. മോഷ്ടിക്കാൻ രഹസ്യമില്ല, ടോക്കൺ മിനിറ്റുകൾക്കകം കാലഹരണപ്പെടും.
pull_request_target ഒപ്പം workflow_run രഹസ്യങ്ങള് ക്ക് ആക്സസ് ഉള്ളവര് ക്ക് പോലും, ഫോര് ക്ക്സിന്റെ പിൻവലിക്കല് ആവശ്യങ്ങള് ക്കുള്ളവ. ട്രോൾ അഭ്യർത്ഥനയിലെ വിശ്വസനീയമല്ലാത്ത കോഡ് പരിശോധിക്കുന്നതുമായി ചേര് ത്ത്, രഹസ്യങ്ങൾ മോഷ്ടിക്കാനുള്ള ആക്രമണകാരികളുടെ ഒരു സാധാരണ മാർഗമാണിത്. അപകടസാധ്യതയെക്കുറിച്ച് നന്നായി മനസ്സിലാക്കുന്നില്ലെങ്കിൽ അവ ഒഴിവാക്കുക.
കൂടാതെ ശ്രദ്ധിക്കുക സ്ക്രിപ്റ്റ് കുത്തിവയ്പ്പ്: ഒരു ട്രസ്റ്റ് ചെയ്യാത്ത ഇൻപുട്ട് ഉപയോഗിച്ച് ഒരു pull request title നേരിട്ട് ഒരു run: പടിപടിയായി.
# Dangerous: the title can contain shell commands
- run: echo "${{ github.event.pull_request.title }}"
# Safer: pass it through an environment variable
- env:
TITLE: ${{ github.event.pull_request.title }}
run: echo "$TITLE"
സംഘടനയുടെ ക്രമീകരണങ്ങളിൽ, ഇനിപ്പറയുന്നവ മാത്രം അനുവദിക്കുകഃ
മൂന്നാം കക്ഷികളുടെ കുറവ് പ്രവർത്തനങ്ങൾ, അപഹരിക്കപ്പെടാവുന്ന കുറവ് കാര്യങ്ങളെയാണ് അർത്ഥമാക്കുന്നത്. ലളിതമായ ജോലികള് ക്ക്, ഒരു പ്രവര് ത്തനത്തേക്കാളും സുരക്ഷിതമാണ് ചില വരികള് .
നിങ്ങളുടെ ഐസില് സിസ്മോര് ചേര് ത്ത് അത് കണ്ടെത്തിയതിനെ ശരിയാക്കൂ. ഇത് ഒരു കണ്ണുതുറക്കുന്ന ആദ്യ റൺ ആണ്.
ഈ ആഴ്ച നിങ്ങൾ മൂന്നു കാര്യങ്ങൾ മാത്രം ചെയ്താൽ: സ്ഥിരസ്ഥിതി ടോക്കൺ വായന മാത്രമായി സജ്ജമാക്കുക, നിങ്ങളുടെ മൂന്നാം കക്ഷി പ്രവർത്തനങ്ങൾ ഷാ-കളിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുന്നതിനായി പുതുക്കുക, ഒരു ദീർഘകാല ക്ലൌഡ് കീ OIDC ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക. പിന്നെ സിസ്മോര് ഓടിച്ചു ലിസ്റ്റില് നോക്ക്.
എന്റെ അഭിപ്രായത്തില് , എല്ലാത്തിനും താക്കോല് ഐ. ഐ. പൈപ്പ്ലൈനില് ആണ് . എല്ലാ രോഗങ്ങളും uses: ഒരു ആശ്രിതത്വം പോലെ, കാരണം അത് തന്നെയാണ്.
ഡെസ്ലി