30.4 Protecting Data: S3, Encryption and Secrets
Quick answer: the short, self-contained version of this lesson is the guide SBOM, Dependency Risk and Secret Leaks.
S3 exposure is the classic cloud leak. Defences:
- Turn on S3 Block Public Access at the account level (S3 console, Block Public Access settings for this account). This overrides mistakes on individual buckets.
- Serve public files through CloudFront with Origin Access Control instead of making the bucket public.
- Use bucket policies that allow only your app role; enable versioning so deleted or ransomed files can be restored.
aws s3api get-public-access-block --bucket reels-media-pune
aws s3api put-public-access-block --bucket reels-media-pune \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api put-bucket-versioning --bucket reels-media-pune --versioning-configuration Status=Enabled
Encryption. S3 encrypts new objects by default (SSE-S3). For more control use KMS keys (SSE-KMS): you decide who may use the key, and every use is logged in CloudTrail. Tick "Encryption" when creating RDS and EBS volumes – it cannot be switched on later without a snapshot copy.
Secrets. Database passwords and API keys belong in AWS Secrets Manager or SSM Parameter Store (SecureString), not in config.php committed to Git.
aws ssm put-parameter --name /reels/db/password --type SecureString --value 'Str0ng#Pass'
aws ssm get-parameter --name /reels/db/password --with-decryption --query Parameter.Value --output text
The EC2 role then needs only ssm:GetParameter on that one parameter.
Ravindra Bagale's Tip
The reason for making a bucket "public" is always "the images weren't showing". The right fix for that is CloudFront + OAC, not a public bucket. And once you turn on account-level Block Public Access, future mistakes are stopped automatically too.
Ravindra Bagale's Tip – मराठी
Bucket "public" करण्याचे कारण नेहमी "images दिसत नव्हते" असते. त्याचा योग्य उपाय CloudFront + OAC आहे, public bucket नाही. आणि account-level Block Public Access एकदा चालू केला की भविष्यातली चूक पण आपोआप थांबते.
Ravindra Bagale's Tip – हिंदी
Bucket "public" करने की वजह हमेशा "images नहीं दिख रही थीं" होती है. उसका सही उपाय CloudFront + OAC है, public bucket नहीं. और account-level Block Public Access एक बार चालू कर दिया तो आगे की गलती भी अपने-आप रुक जाती है.
Lab
Enable account-level Block Public Access. Move the database password of your reels app from config.php into SSM Parameter Store as a SecureString, give the EC2 role permission to read only that parameter, and update the PHP code to fetch it with the AWS SDK.
Real incident: Meta – stolen employee GitHub login used to take code and personal data (Oct 2026)
1. What happened
On 13 October 2026, Meta said an outside group got into some of its GitHub repositories using one employee's stolen credentials. Meta detected the intrusion a few weeks earlier. About 99% of what was taken was business data – software code for some Meta products. The other 1% was personal data that had been put into the repositories by mistake, against company policy. Meta is notifying about 1,500 people, most of them Meta employees in the US, and is offering them credit and dark-web monitoring. Meta cut off the attackers' access, brought in GitHub and law enforcement, rotated the secrets found in the repositories, and is adding scans to catch personal data uploaded to GitHub by mistake. Meta says no Meta product had a vulnerability and its internal systems were not breached. It has not said what types of personal data were involved.
2. How the hack happened (public reporting only – high-level)
- An attacker gets hold of one employee's GitHub login (Meta has not said exactly how it was stolen).
- The attacker signs in as that employee – to GitHub it looks like a normal user.
- The attacker reads and copies repositories that employee could access.
- Inside the code are secrets (keys, tokens) and some personal data that someone had committed by mistake – so a code leak also becomes a data leak.
- Meta detects the access, cuts it off and rotates every secret in those repositories so stolen keys stop working.
3. How to stop it / defend (this lesson: Protecting Data, S3, Encryption and Secrets)
- Strong login for code platforms. Turn on MFA for GitHub, and prefer phishing-resistant security keys or passkeys over SMS codes.
- Short-lived tokens. Use fine-grained tokens with an expiry date, and SSO for the organisation, so a stolen token works only for a short time.
- Never put secrets in code. Keep passwords and keys in SSM Parameter Store or Secrets Manager (like the Lab above), not in
config.phpor Git. - Turn on secret scanning and push protection. GitHub can block a push that contains a key before it is saved.
- No real personal data in repositories. Use fake test data. Real customer or employee data belongs in an encrypted, access-controlled store.
- Watch the audit log. Alert on unusual clones, many downloads, or logins from new places.
4. How to take care so it won't happen again (checklist)
- [ ] MFA is required for every member of your GitHub organisation.
- [ ] Personal access tokens are fine-grained and expire within 90 days or less.
- [ ] Secret scanning and push protection are switched on for all repositories.
- [ ] Run a scan of your old commits for keys and personal data, and rotate anything found.
- [ ] Each person can reach only the repositories they need.
- [ ] When someone leaves, their access and tokens are removed the same day.
- [ ] India students: personal data in code also falls under the DPDP Act – keep it out of Git, and report major incidents to CERT-In within the required time (see Ch.34).
Source: SecurityWeek, "Meta Says Hackers Took Code, Personal Data of 1,500 in GitHub Breach", 13 October 2026; Cybernews, "Meta GitHub breach exposes data of 1,500 people", October 2026.
Check if you're safe: Password Strength Checker
Real incident: Gheist – stolen GitHub tokens used to print private repository secrets into GitHub Actions logs (Oct 2026)
1. What happened
In this lesson you learned one rule: secrets (passwords, API keys, cloud keys) must live in a safe store, not in code. This real case shows the next step. Even when secrets are stored the right way, anyone who can write to the repository can make a pipeline read them. A GitHub token is like a password that lets a program use your GitHub account. A GitHub Actions workflow is a small file in the repository that tells GitHub to run jobs (build, test, deploy) by itself.
- On 25 October 2026, the cloud security company Wiz published research on a campaign it calls Gheist. Wiz has tracked it since 15 September 2026.
- The attackers used stolen GitHub tokens. For every repository a token could reach, their tool added a small workflow that printed the repository's secrets into the job log.
- Wiz recovered more than 13,500 planted branches from more than 850 compromised accounts, from personal projects to the private repositories of enterprise organizations.
- Since 28 July 2026, GitHub holds suspicious workflow runs in public repositories until a collaborator approves them. Every public Gheist run Wiz checked was stuck there, so it never ran. But this hold does not cover private repositories or GitHub Enterprise Server. There, the runs completed.
- In some enterprise organizations, Wiz saw the tool clone private repositories first. Hours later, cloud credentials from the same organization were used to list AWS Secrets Manager secrets. Wiz does not say where those credentials came from.
- Wiz says the stolen tokens came from sources such as infostealer logs (data stolen by malware from people's computers) and tokens exposed in earlier supply-chain attacks. As of 24 October the campaign was still running, and about two-thirds of the accounts involved were no longer available on GitHub.
2. How the hack happened (public reporting only – high-level)
- The attacker got stolen GitHub tokens that could write to repositories.
- For each repository, the tool made a new branch with a name like
ci-sync-plus six random characters. - On that branch it added one workflow file named
sync-check, with the commit messageci: sync config. The commit looked like it came from the token's owner. - A push starts a workflow by itself. So the job ran at once and printed every secret it could read. The values were encoded, so GitHub's automatic hiding of secrets in logs did not recognise them.
- One version ran the job once for each deployment environment, so environment secrets (often production keys) were printed too.
- The tool downloaded the log through GitHub's own API and deleted the run seconds later. The secrets left through GitHub itself, so there was no attacker server to block.
- From about 19 October, one version also tried to search self-hosted runner machines for more keys. Wiz calls that job buggy and reports no successful run.
3. How to stop it / defend (this lesson: protecting secrets)
Why: a secret is only as safe as the list of people and jobs that can read it. On GitHub, anyone with write access to a repository can use every secret in it. So a stolen token with write access is enough.
Controls you can use:
- Put production secrets in a protected environment. In the repository go to Settings, then Environments, then create
production, then turn on Required reviewers. A job cannot read that environment's secrets until a reviewer approves it. - Use OIDC instead of stored cloud keys. OIDC lets a workflow get a short-lived AWS login, so no long-lived AWS key sits in GitHub. In the AWS role trust policy, allow only your protected branch or environment. Example condition value:
repo:YOUR-ORG/YOUR-REPO:environment:production. A random new branch then cannot get the role. - Keep the real secret in AWS Secrets Manager or SSM Parameter Store, like this lesson's lab. Give the pipeline role read access to only the one secret it needs.
- Use short-lived, fine-grained tokens or GitHub Apps instead of old personal access tokens. Give each token only the repositories it needs, and set an expiry date.
- Run self-hosted runners as short-lived machines, without Docker socket access and without open access to the cloud metadata service.
Example: check your own repository for planted branches. Run these steps one by one.
- Open a terminal inside your own cloned repository.
- Run
git ls-remote --heads origin 'ci-sync-*' - Output when you are safe: nothing. The command prints an empty result and returns to the prompt.
- Output when there is a problem: a line like
9f2c… refs/heads/ci-sync-a1b2c3. It means a branch with that name exists on GitHub. - What it means: if you find one, do not run or approve it. Rotate every secret the repository could use, then revoke the token that pushed it. Deleting the branch or the run does not undo the leak.
4. How to take care so it won't happen again (checklist)
- [ ] Production secrets sit in an environment with Required reviewers.
- [ ] Pipelines sign in to AWS with OIDC, and the trust policy allows only protected branches or environments.
- [ ] No long-lived AWS keys are stored as GitHub secrets.
- [ ] Every GitHub token is fine-grained, has an expiry date, and reaches only the repositories it needs.
- [ ] Every month, look in the audit log for workflow runs deleted within a minute and for unknown new branches.
- [ ] If a token leaks: rotate every secret it could reach, revoke the token, and scan the owner's computer for infostealer malware.
- [ ] Self-hosted runners are short-lived and have no Docker socket.
Source: Wiz Blog, "Gheist: Attempted Scaled Abuse of Stolen GitHub Tokens Stumbles" (Rami McCarthy, Hila Ramati), 25 October 2026; The Hacker News, "Gheist Uses Stolen GitHub Tokens to Steal Private Repository Secrets via Actions Logs", 26 October 2026.
1. काय झालं
या lesson मध्ये तुम्ही एक नियम शिकलात: secrets (passwords, API keys, cloud keys) code मध्ये नाही, तर safe store मध्ये ठेवायचे. ही खरी घटना पुढची गोष्ट दाखवते. Secrets योग्य जागी ठेवले तरी, repository मध्ये write करू शकणारा कोणीही pipeline कडून ते वाचून घेऊ शकतो. GitHub token म्हणजे एक प्रकारचा password, ज्याने एखादा program तुमचं GitHub account वापरू शकतो. GitHub Actions workflow म्हणजे repository मधली छोटी file, जी GitHub ला स्वतःहून jobs (build, test, deploy) चालवायला सांगते.
- 25 ऑक्टोबर 2026 ला cloud security company Wiz ने Gheist नावाच्या campaign वर research publish केलं. Wiz 15 सप्टेंबर 2026 पासून याच्यावर लक्ष ठेवून आहे.
- Attackers नी चोरलेले GitHub tokens वापरले. Token ज्या ज्या repository पर्यंत पोहोचत होता, तिथे त्यांच्या tool ने एक छोटा workflow टाकला, जो repository चे secrets job log मध्ये print करत होता.
- Wiz ला 13,500 पेक्षा जास्त planted branches मिळाल्या, 850 पेक्षा जास्त compromised accounts मधून. यात personal projects पासून मोठ्या companies च्या private repositories पर्यंत सगळं होतं.
- 28 जुलै 2026 पासून GitHub public repositories मधले संशयास्पद workflow runs, collaborator approve करेपर्यंत थांबवून ठेवतं. Wiz ने पाहिलेले सगळे public Gheist runs तिथेच अडकले, त्यामुळे ते चाललेच नाहीत. पण हा hold private repositories आणि GitHub Enterprise Server ला लागू होत नाही. तिथे runs पूर्ण झाले.
- काही मोठ्या companies मध्ये Wiz ला दिसलं की tool ने आधी private repositories clone केल्या. काही तासांनी त्याच company चे cloud credentials वापरून AWS Secrets Manager मधल्या secrets ची list काढली गेली. हे credentials कुठून आले ते Wiz ने सांगितलेलं नाही.
- Wiz म्हणतं की चोरलेले tokens infostealer logs (malware ने लोकांच्या computers मधून चोरलेला data) आणि आधीच्या supply-chain attacks मध्ये उघड झालेल्या tokens मधून आले. 24 ऑक्टोबरपर्यंत campaign चालूच होती, आणि त्यातली जवळपास दोन-तृतीयांश accounts GitHub वर आता उपलब्ध नव्हती.
2. Hack कसा झाला (फक्त public reporting – high-level)
- Attacker कडे repositories मध्ये write करू शकणारे चोरलेले GitHub tokens होते.
- प्रत्येक repository साठी tool ने
ci-sync-आणि सहा random characters अशा नावाची नवीन branch बनवली. - त्या branch वर त्याने
sync-checkनावाची एक workflow file टाकली, commit messageci: sync configसोबत. Commit token च्या owner कडून आल्यासारखा दिसत होता. - Push झाला की workflow स्वतःहून सुरू होतो. म्हणून job लगेच चालला आणि त्याला वाचता येणारे सगळे secrets print केले. Values encode केलेल्या होत्या, त्यामुळे logs मध्ये secrets आपोआप लपवणाऱ्या GitHub च्या feature ला त्या ओळखता आल्या नाहीत.
- एका version ने job प्रत्येक deployment environment साठी एकदा चालवला, त्यामुळे environment secrets (बहुतेक वेळा production keys) सुद्धा print झाले.
- Tool ने GitHub च्याच API ने log download केला आणि काही seconds मध्ये run delete केला. Secrets GitHub मधूनच बाहेर गेले, त्यामुळे block करायला attacker चा server नव्हताच.
- साधारण 19 ऑक्टोबरपासून एका version ने self-hosted runner machines वर आणखी keys शोधायचा प्रयत्न केला. Wiz म्हणतं तो job buggy आहे, आणि तो यशस्वी चालल्याचं Wiz ने नोंदवलेलं नाही.
3. हे कसं थांबवायचं / defend कसं करायचं (हा lesson: secrets सुरक्षित ठेवणं)
का: एखादा secret तितकाच safe असतो जितकी तो वाचू शकणाऱ्या लोकांची आणि jobs ची list छोटी असते. GitHub वर repository मध्ये write access असलेला कोणीही त्यातले सगळे secrets वापरू शकतो. म्हणून write access असलेला एक चोरलेला token पुरेसा आहे.
तुम्ही वापरू शकता असे controls:
- Production secrets protected environment मध्ये ठेवा. Repository मध्ये Settings, मग Environments, मग
productionबनवा, मग Required reviewers चालू करा. Reviewer approve करेपर्यंत कोणताही job त्या environment चे secrets वाचू शकत नाही. - Stored cloud keys ऐवजी OIDC वापरा. OIDC मुळे workflow ला थोड्या वेळासाठीच चालणारं AWS login मिळतं, त्यामुळे GitHub मध्ये कायमची AWS key ठेवावी लागत नाही. AWS role च्या trust policy मध्ये फक्त तुमची protected branch किंवा environment allow करा. Example condition value:
repo:YOUR-ORG/YOUR-REPO:environment:production. मग कोणत्याही नवीन random branch ला तो role मिळत नाही. - खरा secret AWS Secrets Manager किंवा SSM Parameter Store मध्ये ठेवा, या lesson च्या lab सारखा. Pipeline role ला फक्त त्याला लागणाऱ्या एका secret चा read access द्या.
- जुन्या personal access tokens ऐवजी short-lived, fine-grained tokens किंवा GitHub Apps वापरा. प्रत्येक token ला फक्त लागणाऱ्या repositories द्या, आणि expiry date ठेवा.
- Self-hosted runners थोड्या वेळासाठीच्या machines म्हणून चालवा, Docker socket access शिवाय आणि cloud metadata service च्या मोकळ्या access शिवाय.
Example: तुमच्या स्वतःच्या repository मध्ये planted branches आहेत का ते check करा. या steps एक-एक करून करा.
- तुमच्या स्वतःच्या cloned repository मध्ये terminal उघडा.
git ls-remote --heads origin 'ci-sync-*'चालवा.- सगळं safe असेल तेव्हा output: काहीच नाही. Command रिकामा result देऊन prompt वर परत येतो.
- Problem असेल तेव्हा output:
9f2c… refs/heads/ci-sync-a1b2c3सारखी line. म्हणजे त्या नावाची branch GitHub वर आहे. - याचा अर्थ: अशी branch सापडली तर ती run किंवा approve करू नका. Repository वापरू शकणारा प्रत्येक secret rotate करा, मग ती branch push करणारा token revoke करा. Branch किंवा run delete केल्याने leak परत जात नाही.
4. पुन्हा असं होऊ नये म्हणून काय काळजी घ्यायची (checklist)
- [ ] Production secrets Required reviewers असलेल्या environment मध्ये आहेत.
- [ ] Pipelines AWS मध्ये OIDC ने sign in करतात, आणि trust policy फक्त protected branches किंवा environments allow करते.
- [ ] GitHub secrets मध्ये कायमच्या AWS keys ठेवलेल्या नाहीत.
- [ ] प्रत्येक GitHub token fine-grained आहे, त्याला expiry date आहे, आणि तो फक्त लागणाऱ्या repositories पर्यंत पोहोचतो.
- [ ] दर महिन्याला audit log मध्ये एका minute च्या आत delete झालेले workflow runs आणि अनोळखी नवीन branches शोधा.
- [ ] Token leak झाला तर: तो पोहोचू शकणारा प्रत्येक secret rotate करा, token revoke करा, आणि owner चा computer infostealer malware साठी scan करा.
- [ ] Self-hosted runners थोड्या वेळासाठीच असतात आणि त्यांना Docker socket नाही.
स्रोत: Wiz Blog, "Gheist: Attempted Scaled Abuse of Stolen GitHub Tokens Stumbles" (Rami McCarthy, Hila Ramati), 25 ऑक्टोबर 2026; The Hacker News, "Gheist Uses Stolen GitHub Tokens to Steal Private Repository Secrets via Actions Logs", 26 ऑक्टोबर 2026.
1. क्या हुआ
इस lesson में आपने एक नियम सीखा: secrets (passwords, API keys, cloud keys) code में नहीं, बल्कि safe store में रखने हैं. यह असली घटना अगली बात दिखाती है. Secrets सही जगह रखे हों तब भी, repository में write कर सकने वाला कोई भी pipeline से उन्हें पढ़वा सकता है. GitHub token एक तरह का password है, जिससे कोई program आपका GitHub account इस्तेमाल कर सकता है. GitHub Actions workflow repository की एक छोटी file है, जो GitHub को अपने-आप jobs (build, test, deploy) चलाने को कहती है.
- 25 अक्टूबर 2026 को cloud security company Wiz ने Gheist नाम के campaign पर research publish किया. Wiz 15 सितंबर 2026 से इस पर नज़र रखे हुए है.
- Attackers ने चोरी किए हुए GitHub tokens इस्तेमाल किए. Token जिस-जिस repository तक पहुँचता था, वहाँ उनके tool ने एक छोटा workflow डाला, जो repository के secrets job log में print करता था.
- Wiz को 13,500 से ज़्यादा planted branches मिलीं, 850 से ज़्यादा compromised accounts से. इनमें personal projects से लेकर बड़ी companies की private repositories तक सब था.
- 28 जुलाई 2026 से GitHub public repositories के संदिग्ध workflow runs को, collaborator के approve करने तक रोककर रखता है. Wiz ने जो भी public Gheist runs देखे, सब वहीं अटके रहे, इसलिए वे चले ही नहीं. लेकिन यह hold private repositories और GitHub Enterprise Server पर लागू नहीं होता. वहाँ runs पूरे हो गए.
- कुछ बड़ी companies में Wiz ने देखा कि tool ने पहले private repositories clone कीं. कुछ घंटों बाद उसी company के cloud credentials से AWS Secrets Manager के secrets की list निकाली गई. ये credentials कहाँ से आए, यह Wiz ने नहीं बताया.
- Wiz के अनुसार चोरी के tokens infostealer logs (malware द्वारा लोगों के computers से चुराया गया data) और पहले के supply-chain attacks में खुले tokens से आए. 24 अक्टूबर तक campaign चल ही रहा था, और इसमें शामिल लगभग दो-तिहाई accounts GitHub पर अब उपलब्ध नहीं थे.
2. Hack कैसे हुआ (सिर्फ़ public reporting – high-level)
- Attacker के पास repositories में write कर सकने वाले चोरी के GitHub tokens थे.
- हर repository के लिए tool ने
ci-sync-और छह random characters वाले नाम की नई branch बनाई. - उस branch पर उसने
sync-checkनाम की एक workflow file डाली, commit messageci: sync configके साथ. Commit token के owner की तरफ़ से आया हुआ दिखता था. - Push होते ही workflow अपने-आप शुरू होता है. इसलिए job तुरंत चला और उसे पढ़ने को मिलने वाले सारे secrets print कर दिए. Values encode की हुई थीं, इसलिए logs में secrets अपने-आप छिपाने वाला GitHub का feature उन्हें पहचान नहीं पाया.
- एक version ने job हर deployment environment के लिए एक बार चलाया, इसलिए environment secrets (अक्सर production keys) भी print हो गए.
- Tool ने GitHub की अपनी API से log download किया और कुछ seconds में run delete कर दिया. Secrets GitHub से ही बाहर गए, इसलिए block करने के लिए attacker का कोई server था ही नहीं.
- लगभग 19 अक्टूबर से एक version ने self-hosted runner machines पर और keys ढूँढने की कोशिश की. Wiz कहता है कि वह job buggy है, और उसके सफल चलने की कोई बात Wiz ने दर्ज नहीं की.
3. इसे कैसे रोकें / defend कैसे करें (यह lesson: secrets को सुरक्षित रखना)
क्यों: कोई secret उतना ही safe है जितनी उसे पढ़ सकने वाले लोगों और jobs की list छोटी है. GitHub पर repository में write access वाला कोई भी उसके सारे secrets इस्तेमाल कर सकता है. इसलिए write access वाला एक चोरी का token काफ़ी है.
आप ये controls इस्तेमाल कर सकते हैं:
- Production secrets को protected environment में रखें. Repository में Settings, फिर Environments, फिर
productionबनाएँ, फिर Required reviewers चालू करें. Reviewer के approve करने तक कोई भी job उस environment के secrets नहीं पढ़ सकता. - Stored cloud keys की जगह OIDC इस्तेमाल करें. OIDC से workflow को थोड़े समय तक चलने वाला AWS login मिलता है, इसलिए GitHub में हमेशा की AWS key नहीं रखनी पड़ती. AWS role की trust policy में सिर्फ़ अपनी protected branch या environment allow करें. Example condition value:
repo:YOUR-ORG/YOUR-REPO:environment:production. फिर किसी नई random branch को वह role नहीं मिलता. - असली secret AWS Secrets Manager या SSM Parameter Store में रखें, इस lesson के lab की तरह. Pipeline role को सिर्फ़ उसकी ज़रूरत वाले एक secret का read access दें.
- पुराने personal access tokens की जगह short-lived, fine-grained tokens या GitHub Apps इस्तेमाल करें. हर token को सिर्फ़ ज़रूरी repositories दें, और expiry date रखें.
- Self-hosted runners को थोड़े समय वाली machines की तरह चलाएँ, Docker socket access के बिना और cloud metadata service के खुले access के बिना.
Example: अपनी खुद की repository में planted branches हैं या नहीं, यह check करें. ये steps एक-एक करके करें.
- अपनी खुद की cloned repository में terminal खोलें.
git ls-remote --heads origin 'ci-sync-*'चलाएँ.- सब safe हो तो output: कुछ भी नहीं. Command खाली result देकर prompt पर लौट आता है.
- Problem हो तो output:
9f2c… refs/heads/ci-sync-a1b2c3जैसी line. मतलब उस नाम की branch GitHub पर मौजूद है. - इसका मतलब: ऐसी branch मिले तो उसे run या approve न करें. Repository जो भी secret इस्तेमाल कर सकती थी, हर एक को rotate करें, फिर वह branch push करने वाला token revoke करें. Branch या run delete करने से leak वापस नहीं होता.
4. यह दोबारा न हो, इसके लिए क्या ध्यान रखें (checklist)
- [ ] Production secrets Required reviewers वाले environment में हैं.
- [ ] Pipelines AWS में OIDC से sign in करती हैं, और trust policy सिर्फ़ protected branches या environments को allow करती है.
- [ ] GitHub secrets में हमेशा की AWS keys नहीं रखी हैं.
- [ ] हर GitHub token fine-grained है, उसकी expiry date है, और वह सिर्फ़ ज़रूरी repositories तक पहुँचता है.
- [ ] हर महीने audit log में एक minute के अंदर delete हुए workflow runs और अनजान नई branches ढूँढें.
- [ ] Token leak हो तो: वह जहाँ तक पहुँच सकता था, वहाँ का हर secret rotate करें, token revoke करें, और owner का computer infostealer malware के लिए scan करें.
- [ ] Self-hosted runners थोड़े समय के लिए होते हैं और उनके पास Docker socket नहीं है.
स्रोत: Wiz Blog, "Gheist: Attempted Scaled Abuse of Stolen GitHub Tokens Stumbles" (Rami McCarthy, Hila Ramati), 25 अक्टूबर 2026; The Hacker News, "Gheist Uses Stolen GitHub Tokens to Steal Private Repository Secrets via Actions Logs", 26 अक्टूबर 2026.
Check if you're safe: Password Strength Checker
Real incident: Chainalysis – offensive agentic AI intrusion exposed customer profile data (Oct–Nov 2026)
1. What happened
In this lesson you learnt that “protecting data” means knowing which fields an attacker can reach even when the crown-jewel investigation content stays locked.
- On about 30–31 October 2026, crypto-compliance firm Chainalysis disclosed a security incident. It updated the notice around 2 November 2026.
- An external actor used what Chainalysis called “offensive agentic techniques” to reach internal systems and tools.
- Accessed data was described as non-sensitive customer account / profile fields: user IDs, full names, email addresses, and organization role labels.
- Chainalysis said it found no evidence of access to investigation content, transaction or query results, clear-text passwords, MFA secrets, or session tokens.
- Customers were notified; users were told to enable MFA and watch for suspicious password-reset or authentication requests.
2. How the hack happened (public reporting only – high-level)
- An outside actor automated parts of the intrusion with agent-style offensive tooling.
- That path reached some internal tools that could read customer profile records.
- Profile fields (names, emails, roles, IDs) were exposed; deeper investigation data was not, per the company.
- Chainalysis contained the access, assessed scope per customer org, and published updates.
- Customers were asked to harden login (MFA) and treat unexpected reset mails as suspect.
3. How to stop it / defend (this lesson: protecting data)
Why: even “just email + name + role” is enough for targeted phishing against your staff and your customers.
Controls you can use:
- Separate profile stores from investigation vaults with different credentials and networks.
- Turn on MFA account-wide and check admin MFA coverage (Example 1).
- Alert on password-reset spikes after any vendor breach mail (Example 2).
- Publish a status page customers can trust when rumors start (Example 3).
- Least privilege on internal tools that can dump user directories – agents love wide API tokens.
- Log and review agent / automation identities the same way you review human admins.
Example 1: sanity-check cloud MFA posture on an account you own.
- Run
aws iam get-account-summary 2>/dev/null | head -n 20 - Output: like
"AccountMFAEnabled": 1,\n"Users": 42. - What it means: root/account MFA is on. Still enforce MFA on every human and automation user.
Example 2: watch password-reset lines in your app auth log.
- Run
grep -iE 'password.?reset|mfa|login' /var/log/app/auth.log 2>/dev/null | tail -n 5 - Output: like
2026-10-31T09:12:01Z WARN password_reset requested for user=alex@example.com ip=198.51.100.9. - What it means: a reset from a strange IP right after a breach headline is a call to the user, not a quiet ignore.
Example 3: read your own status API (or skip if you have none).
- Run
curl -s https://status.example.com/api/v2/summary.json 2>/dev/null | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("status",{}).get("description","n/a"))' 2>/dev/null || echo status-check-skipped - Output: like
All Systems Operational. - What it means: customers need one trusted place for “what was accessed” updates.
4. How to take care so it won't happen again (checklist)
- [ ] Profile PII and investigation data sit in different trust zones.
- [ ] MFA required for every customer and every internal admin.
- [ ] Password-reset and new-device alerts are on.
- [ ] Automation / agent service accounts are inventoried and short-lived.
- [ ] Customer notice template names exactly which fields were / were not touched.
- [ ] Post-incident: rotate tokens the agent path could have seen.
Source: Chainalysis blog, "Security Incident Information" (October 30 disclosure, updated November 2, 2026); BleepingComputer, The Hacker News, SecurityWeek and The Block coverage of the same notice.
1. काय झालं
या lesson मध्ये तुम्ही शिकलात की "data संरक्षित करणं" म्हणजे crown-jewel investigation content लॉक असतानाही attacker कोणती fields गाठू शकतो हे जाणून घेणं.
- सुमारे 30–31 ऑक्टोबर 2026 ला crypto-compliance company Chainalysis ने security incident disclose केला. Notice सुमारे 2 नोव्हेंबर 2026 ला update झाला.
- External actor नी Chainalysis ज्याला "offensive agentic techniques" म्हणतं ते वापरून internal systems आणि tools गाठले.
- Access झालेलं data non-sensitive customer account / profile fields म्हणून वर्णन केलं: user IDs, full names, email addresses आणि organization role labels.
- Chainalysis म्हणालं investigation content, transaction किंवा query results, clear-text passwords, MFA secrets किंवा session tokens वर access चा कोणताही पुरावा नाही.
- Customers ना कळवलं; users ना MFA चालू करायला आणि suspicious password-reset किंवा authentication requests वर लक्ष ठेवायला सांगितलं.
2. हॅक कसा झाला (फक्त जाहीर माहितीवरून – थोडक्यात)
- बाहेरच्या actor नी agent-style offensive tooling ने intrusion चे काही भाग automate केले.
- तो path काही internal tools पर्यंत पोहोचला जे customer profile records वाचू शकतात.
- Profile fields (names, emails, roles, IDs) expose झाल्या; कंपनी नुसार deeper investigation data नाही.
- Chainalysis ने access contain केला, प्रत्येक customer org साठी scope assess केला, आणि updates प्रकाशित केल्या.
- Customers ना login harden करायला (MFA) आणि unexpected reset mails suspicious समजायला सांगितलं.
3. हे कसं थांबवायचं / बचाव (हा lesson: data संरक्षित करणं)
का: फक्त "email + name + role" सुद्धा तुमच्या staff आणि customers वर targeted phishing साठी पुरेसं आहे.
तुम्ही वापरू शकता असे controls:
- Profile stores आणि investigation vaults वेगळे ठेवा – वेगळ्या credentials आणि networks सह.
- Account-wide MFA चालू करा आणि admin MFA coverage चेक करा (उदाहरण 1).
- Vendor breach mail नंतर password-reset spikes वर alert (उदाहरण 2).
- Customers विश्वास ठेवतील असा status page प्रकाशित करा जेव्हा अफवा सुरू होतात (उदाहरण 3).
- User directories dump करणाऱ्या internal tools वर least privilege – agents ना wide API tokens आवडतात.
- Agent / automation identities human admins सारख्याच log आणि review करा.
उदाहरण 1: तुमच्या cloud account वर MFA posture sanity-check करा.
- चालवा:
aws iam get-account-summary 2>/dev/null | head -n 20 - Output: जसं
"AccountMFAEnabled": 1,\n"Users": 42. - याचा अर्थ: root/account MFA चालू आहे. तरीही प्रत्येक human आणि automation user वर MFA enforce करा.
उदाहरण 2: तुमच्या app auth log मधल्या password-reset lines बघा.
- चालवा:
grep -iE 'password.?reset|mfa|login' /var/log/app/auth.log 2>/dev/null | tail -n 5 - Output: जसं
2026-10-31T09:12:01Z WARN password_reset requested for user=alex@example.com ip=198.51.100.9. - याचा अर्थ: breach headline नंतर विचित्र IP वरून reset म्हणजे user ला dial करा, शांत दुर्लक्ष नाही.
उदाहरण 3: तुमचा status API वाचा (नसेल तर skip).
- चालवा:
curl -s https://status.example.com/api/v2/summary.json 2>/dev/null | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("status",{}).get("description","n/a"))' 2>/dev/null || echo status-check-skipped - Output: जसं
All Systems Operational. - याचा अर्थ: customers ना "काय access झालं" updates साठी एक trusted जागा लागते.
4. परत असं होऊ नये म्हणून काळजी (checklist)
- [ ] Profile PII आणि investigation data वेगवेगळ्या trust zones मध्ये आहेत.
- [ ] प्रत्येक customer आणि प्रत्येक internal admin साठी MFA आवश्यक.
- [ ] Password-reset आणि new-device alerts चालू आहेत.
- [ ] Automation / agent service accounts inventory केलेली आणि short-lived आहेत.
- [ ] Customer notice template ने नेमकं कोणत्या fields touch झाल्या / नाहीत ते सांगितलं आहे.
- [ ] Post-incident: agent path ला दिसू शकणारे tokens rotate होतात.
स्रोत: Chainalysis blog, "Security Incident Information" (30 ऑक्टोबर disclosure, 2 नोव्हेंबर 2026 update); BleepingComputer, The Hacker News, SecurityWeek आणि The Block coverage of the same notice.
1. क्या हुआ
इस lesson में आपने सीखा कि "data की रक्षा" का मतलब है यह जानना कि crown-jewel investigation content लॉक होने पर भी attacker कौन-सी fields तक पहुँच सकता है.
- करीब 30–31 अक्टूबर 2026 को crypto-compliance company Chainalysis ने security incident disclose किया. Notice करीब 2 नवंबर 2026 को update हुआ.
- External actor ने Chainalysis जिसे "offensive agentic techniques" कहता है उसके ज़रिए internal systems और tools तक पहुँचा.
- Access हुए data को non-sensitive customer account / profile fields कहा गया: user IDs, full names, email addresses और organization role labels.
- Chainalysis ने कहा investigation content, transaction या query results, clear-text passwords, MFA secrets या session tokens पर access का कोई सबूत नहीं.
- Customers को बताया गया; users से MFA चालू करने और suspicious password-reset या authentication requests पर नज़र रखने को कहा गया.
2. हैक कैसे हुआ (सिर्फ़ सार्वजनिक जानकारी से – संक्षेप में)
- बाहर के actor ने agent-style offensive tooling से intrusion के कुछ हिस्से automate किए.
- वह path कुछ internal tools तक पहुँचा जो customer profile records पढ़ सकते हैं.
- Profile fields (names, emails, roles, IDs) expose हुईं; कंपनी के अनुसार deeper investigation data नहीं.
- Chainalysis ने access contain किया, हर customer org के लिए scope assess किया, और updates प्रकाशित किए.
- Customers से login harden करने (MFA) और unexpected reset mails को suspicious मानने को कहा गया.
3. इसे कैसे रोकें / बचाव (यह lesson: data की रक्षा)
क्यों: सिर्फ़ "email + name + role" भी आपके staff और customers पर targeted phishing के लिए काफ़ी है.
आप ये controls इस्तेमाल कर सकते हैं:
- Profile stores और investigation vaults अलग रखें – अलग credentials और networks के साथ.
- Account-wide MFA चालू करें और admin MFA coverage चेक करें (उदाहरण 1).
- Vendor breach mail के बाद password-reset spikes पर alert (उदाहरण 2).
- Customers जिस पर भरोसा करें वैसा status page प्रकाशित करें जब अफ़वाहें शुरू हों (उदाहरण 3).
- User directories dump करने वाले internal tools पर least privilege – agents को wide API tokens पसंद हैं.
- Agent / automation identities को human admins की तरह ही log और review करें.
उदाहरण 1: अपने cloud account पर MFA posture sanity-check करें.
- चलाएँ:
aws iam get-account-summary 2>/dev/null | head -n 20 - Output: जैसे
"AccountMFAEnabled": 1,\n"Users": 42. - इसका मतलब: root/account MFA चालू है. फिर भी हर human और automation user पर MFA enforce करें.
उदाहरण 2: अपने app auth log में password-reset lines देखें.
- चलाएँ:
grep -iE 'password.?reset|mfa|login' /var/log/app/auth.log 2>/dev/null | tail -n 5 - Output: जैसे
2026-10-31T09:12:01Z WARN password_reset requested for user=alex@example.com ip=198.51.100.9. - इसका मतलब: breach headline के बाद अजीब IP से reset मतलब user को dial करें, चुपचाप नज़रअंदाज़ नहीं.
उदाहरण 3: अपना status API पढ़ें (न हो तो skip).
- चलाएँ:
curl -s https://status.example.com/api/v2/summary.json 2>/dev/null | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("status",{}).get("description","n/a"))' 2>/dev/null || echo status-check-skipped - Output: जैसे
All Systems Operational. - इसका मतलब: customers को "क्या access हुआ" updates के लिए एक trusted जगह चाहिए.
4. दोबारा ऐसा न हो, इसके लिए सावधानी (checklist)
- [ ] Profile PII और investigation data अलग trust zones में हैं.
- [ ] हर customer और हर internal admin के लिए MFA ज़रूरी.
- [ ] Password-reset और new-device alerts चालू हैं.
- [ ] Automation / agent service accounts inventory किए गए और short-lived हैं.
- [ ] Customer notice template ठीक-ठीक बताता है कौन-सी fields touch हुईं / नहीं.
- [ ] Post-incident: agent path को दिख सकने वाले tokens rotate होते हैं.
स्रोत: Chainalysis blog, "Security Incident Information" (30 अक्टूबर disclosure, 2 नवंबर 2026 update); BleepingComputer, The Hacker News, SecurityWeek और The Block coverage of the same notice.
Ravindra Bagale's Tip
“Only names and emails” is still phishing fuel. After an agentic intrusion, force MFA, watch password-reset spikes, and say clearly which fields were and were not touched.
Ravindra Bagale's Tip – मराठी
"फक्त names आणि emails" सुद्धा phishing चा इंधन आहे. Agentic intrusion नंतर MFA सक्ती करा, password-reset spikes बघा, आणि कोणत्या fields touch झाल्या / नाहीत ते स्पष्ट सांगा.
Ravindra Bagale's Tip – हिंदी
"सिर्फ़ names और emails" भी phishing का ईंधन है. Agentic intrusion के बाद MFA अनिवार्य करें, password-reset spikes देखें, और साफ़ बताएँ कौन-सी fields touch हुईं / नहीं.
Check if you're safe: Password Strength Checker