opencode-skills-collection 4.0.68 → 4.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +266 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6943 -323
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: saas-security-posture
|
|
3
|
+
description: Audit and harden your SaaS tool stack
|
|
4
|
+
category: devops
|
|
5
|
+
risk: critical
|
|
6
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
7
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: '2026-09-20'
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
12
|
+
compatibility: Requires the relevant OS/platform tooling and privileged access where
|
|
13
|
+
noted. Docs-only; helper scripts and templates not bundled.
|
|
14
|
+
metadata:
|
|
15
|
+
author: devops-skills
|
|
16
|
+
version: '1.0'
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# SaaS Security Posture Management for Startups
|
|
20
|
+
|
|
21
|
+
Secure every SaaS tool your company relies on with practical, command-driven hardening.
|
|
22
|
+
|
|
23
|
+
## When to Use This Skill
|
|
24
|
+
|
|
25
|
+
- **SOC 2 preparation** — auditors need evidence of MFA, access controls, and OAuth governance.
|
|
26
|
+
- **Suspicious OAuth app** — an employee authorized a third-party app with broad scopes.
|
|
27
|
+
- **SaaS sprawl** — teams sign up for tools with company email and nobody tracks them.
|
|
28
|
+
- **Post-incident hardening** — after phishing or credential leaks, tighten every surface.
|
|
29
|
+
|
|
30
|
+
## 2. SaaS Inventory Audit
|
|
31
|
+
|
|
32
|
+
### Google Workspace — OAuth Grants
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
gam all users show tokens > oauth_tokens_audit.csv
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### GitHub — Installed Apps
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
gh api /orgs/{ORG}/installations --paginate \
|
|
42
|
+
--jq '.installations[] | {app: .app_slug, permissions: .permissions, created: .created_at}'
|
|
43
|
+
gh api /orgs/{ORG}/credential-authorizations --paginate \
|
|
44
|
+
--jq '.[] | {login: .login, credential_type: .credential_type}'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Slack — Approved and Pending Apps
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl -s -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
51
|
+
"https://slack.com/api/admin.apps.approved.list" | jq '.approved_apps[] | {name: .app.name, id: .app.id}'
|
|
52
|
+
curl -s -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
53
|
+
"https://slack.com/api/admin.apps.requests.list" | jq '.app_requests[]'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### AWS — IAM Credential Report
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
aws iam generate-credential-report
|
|
60
|
+
aws iam get-credential-report --output text --query 'Content' | base64 -d > iam_credential_report.csv
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Master Inventory Template
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
tools:
|
|
67
|
+
- name: Google Workspace
|
|
68
|
+
owner: it@company.com
|
|
69
|
+
sso: true
|
|
70
|
+
mfa: enforced
|
|
71
|
+
- name: GitHub Enterprise
|
|
72
|
+
owner: engineering@company.com
|
|
73
|
+
sso: true
|
|
74
|
+
mfa: enforced
|
|
75
|
+
- name: Slack Business+
|
|
76
|
+
owner: it@company.com
|
|
77
|
+
sso: true
|
|
78
|
+
app_approval: required
|
|
79
|
+
- name: AWS Organizations
|
|
80
|
+
owner: platform@company.com
|
|
81
|
+
sso: true
|
|
82
|
+
scp_enforced: true
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 3. GitHub Security Hardening
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Enforce 2FA and find non-compliant members
|
|
91
|
+
gh api -X PATCH /orgs/{ORG} -f two_factor_requirement_enabled=true
|
|
92
|
+
gh api /orgs/{ORG}/members?filter=2fa_disabled --paginate --jq '.[].login'
|
|
93
|
+
|
|
94
|
+
# Verify SAML SSO identities
|
|
95
|
+
gh api /orgs/{ORG}/credential-authorizations --paginate \
|
|
96
|
+
--jq '.[] | {login: .login, saml_name_id: .saml_name_id}'
|
|
97
|
+
|
|
98
|
+
# Add IP allow list entry
|
|
99
|
+
gh api -X POST /orgs/{ORG}/ip-allow-list \
|
|
100
|
+
-f allow_list_value="203.0.113.0/24" -f name="Office VPN" -F is_active=true
|
|
101
|
+
|
|
102
|
+
# Branch protection on main
|
|
103
|
+
gh api -X PUT /repos/{ORG}/{REPO}/branches/main/protection \
|
|
104
|
+
-H "Accept: application/vnd.github+json" --input - <<'EOF'
|
|
105
|
+
{
|
|
106
|
+
"required_status_checks": {"strict": true, "contexts": ["ci/build","ci/test"]},
|
|
107
|
+
"enforce_admins": true,
|
|
108
|
+
"required_pull_request_reviews": {
|
|
109
|
+
"required_approving_review_count": 2,
|
|
110
|
+
"dismiss_stale_reviews": true,
|
|
111
|
+
"require_code_owner_reviews": true
|
|
112
|
+
},
|
|
113
|
+
"restrictions": null,
|
|
114
|
+
"allow_force_pushes": false,
|
|
115
|
+
"allow_deletions": false
|
|
116
|
+
}
|
|
117
|
+
EOF
|
|
118
|
+
|
|
119
|
+
# Audit PATs and revoke stale tokens
|
|
120
|
+
gh api /orgs/{ORG}/personal-access-tokens --paginate \
|
|
121
|
+
--jq '.[] | {owner: .owner.login, name: .token_name, expires: .token_expires_at}'
|
|
122
|
+
gh api -X DELETE /orgs/{ORG}/personal-access-tokens/{PAT_ID}
|
|
123
|
+
|
|
124
|
+
# Audit deploy keys and webhooks
|
|
125
|
+
for repo in $(gh repo list {ORG} --limit 500 --json name -q '.[].name'); do
|
|
126
|
+
gh api /repos/{ORG}/${repo}/keys --jq '.[] | {title: .title, read_only: .read_only}'
|
|
127
|
+
done
|
|
128
|
+
gh api /orgs/{ORG}/hooks --jq '.[] | {url: .config.url, events: .events, active: .active}'
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 4. Slack Security
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Require app approval
|
|
137
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
138
|
+
-H "Content-Type: application/json" \
|
|
139
|
+
"https://slack.com/api/admin.apps.config.set" -d '{"app_approval_enabled": true}'
|
|
140
|
+
|
|
141
|
+
# Set workspace to invite-only
|
|
142
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
143
|
+
-H "Content-Type: application/json" \
|
|
144
|
+
"https://slack.com/api/admin.teams.settings.setDiscoverability" \
|
|
145
|
+
-d '{"team_id": "T0XXXXXXX", "discoverability": "invite_only"}'
|
|
146
|
+
|
|
147
|
+
# Force re-authentication every 24 hours
|
|
148
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
149
|
+
-H "Content-Type: application/json" \
|
|
150
|
+
"https://slack.com/api/admin.teams.settings.setSessionDuration" \
|
|
151
|
+
-d '{"team_id": "T0XXXXXXX", "session_duration": 86400}'
|
|
152
|
+
|
|
153
|
+
# Set message retention to 1 year
|
|
154
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
155
|
+
-H "Content-Type: application/json" \
|
|
156
|
+
"https://slack.com/api/admin.teams.settings.setRetentionPolicy" \
|
|
157
|
+
-d '{"team_id": "T0XXXXXXX", "retention_type": "all", "retention_duration": 365}'
|
|
158
|
+
|
|
159
|
+
# Audit Slack Connect shared channels
|
|
160
|
+
curl -s -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
161
|
+
"https://slack.com/api/admin.conversations.search?search_channel_types=connect" \
|
|
162
|
+
| jq '.conversations[] | {name: .name, is_ext_shared: .is_ext_shared}'
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 5. Google Workspace Hardening
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Enforce 2-Step Verification and strong passwords
|
|
171
|
+
gam update org "/" settings 2sv enforced
|
|
172
|
+
gam update org "/" settings password_length 14
|
|
173
|
+
|
|
174
|
+
# Block all third-party OAuth apps, then whitelist specific ones
|
|
175
|
+
gam update org "/" settings oauth_access block_all
|
|
176
|
+
gam update org "/" settings oauth_access whitelist client_id:APP_CLIENT_ID_1
|
|
177
|
+
|
|
178
|
+
# Disable external Drive sharing and file transfers
|
|
179
|
+
gam update org "/" settings drive sharing_outside_domain off
|
|
180
|
+
gam update org "/" settings drive transfer_to_personal off
|
|
181
|
+
gam update org "/" settings groups external_members off
|
|
182
|
+
|
|
183
|
+
# Verify email authentication records
|
|
184
|
+
dig TXT company.com | grep "v=spf1"
|
|
185
|
+
dig TXT google._domainkey.company.com
|
|
186
|
+
dig TXT _dmarc.company.com
|
|
187
|
+
# Expected: v=DMARC1; p=reject; rua=mailto:dmarc-reports@company.com; pct=100
|
|
188
|
+
|
|
189
|
+
# Mobile device management
|
|
190
|
+
gam update org "/" settings mobile management advanced
|
|
191
|
+
gam update org "/" settings mobile screen_lock required
|
|
192
|
+
gam update org "/" settings mobile encryption required
|
|
193
|
+
gam update mobile ${DEVICE_ID} action wipe # compromised device
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 6. AWS Account Security
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Root account lockdown — verify MFA, remove access keys
|
|
202
|
+
aws iam get-account-summary --query 'SummaryMap.AccountMFAEnabled'
|
|
203
|
+
aws iam get-account-summary --query 'SummaryMap.AccountAccessKeysPresent'
|
|
204
|
+
|
|
205
|
+
# SSO permission set with least privilege
|
|
206
|
+
aws sso-admin create-permission-set --instance-arn "${SSO_INSTANCE_ARN}" \
|
|
207
|
+
--name "DeveloperAccess" --session-duration "PT8H"
|
|
208
|
+
aws sso-admin attach-managed-policy-to-permission-set \
|
|
209
|
+
--instance-arn "${SSO_INSTANCE_ARN}" --permission-set-arn "${PERMISSION_SET_ARN}" \
|
|
210
|
+
--managed-policy-arn "arn:aws:iam::aws:policy/ReadOnlyAccess"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Service Control Policies
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"Version": "2012-10-17",
|
|
218
|
+
"Statement": [
|
|
219
|
+
{"Sid": "DenyRootActions", "Effect": "Deny", "Action": "*", "Resource": "*",
|
|
220
|
+
"Condition": {"StringLike": {"aws:PrincipalArn": "arn:aws:iam::*:root"}}},
|
|
221
|
+
{"Sid": "DenyLeaveOrg", "Effect": "Deny",
|
|
222
|
+
"Action": "organizations:LeaveOrganization", "Resource": "*"}
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
aws organizations create-policy --name "DenyRootActions" \
|
|
229
|
+
--type SERVICE_CONTROL_POLICY --content file://deny-root-actions.json
|
|
230
|
+
aws organizations attach-policy --policy-id "${POLICY_ID}" --target-id "${ORG_ROOT_ID}"
|
|
231
|
+
|
|
232
|
+
# Organization-wide CloudTrail
|
|
233
|
+
aws cloudtrail create-trail --name org-security-trail \
|
|
234
|
+
--s3-bucket-name company-cloudtrail-logs \
|
|
235
|
+
--is-multi-region-trail --is-organization-trail --enable-log-file-validation
|
|
236
|
+
aws cloudtrail start-logging --name org-security-trail
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 7. OAuth App Review
|
|
242
|
+
|
|
243
|
+
### Identify High-Risk Grants
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Google — find apps with dangerous scopes
|
|
247
|
+
gam all users show tokens | grep -E "(drive|gmail|admin)" > high_risk_oauth.txt
|
|
248
|
+
|
|
249
|
+
# GitHub — find apps with write access
|
|
250
|
+
gh api /orgs/{ORG}/installations --paginate \
|
|
251
|
+
--jq '.installations[] | select(.permissions.contents == "write") | {app: .app_slug}'
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Revoke Dangerous Grants
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
gam user compromised@company.com delete token clientid APP_CLIENT_ID # single app
|
|
258
|
+
gam user compromised@company.com delete tokens # all apps
|
|
259
|
+
gh api -X DELETE /orgs/{ORG}/installations/{INSTALLATION_ID} # GitHub app
|
|
260
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
261
|
+
-H "Content-Type: application/json" \
|
|
262
|
+
"https://slack.com/api/admin.apps.uninstall" -d '{"app_id": "A0XXXXXXX"}'
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Scope Risk Classification
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
CRITICAL — revoke unless justified:
|
|
269
|
+
Google: mail.google.com, admin.directory.user | GitHub: admin:org, repo | Slack: admin
|
|
270
|
+
HIGH — review carefully:
|
|
271
|
+
Google: googleapis.com/auth/drive | GitHub: contents:write | Slack: channels:read
|
|
272
|
+
LOW — generally safe:
|
|
273
|
+
Google: userinfo.email | GitHub: read:org | Slack: identity.basic
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 8. Admin Account Protection
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# Dedicated admin account in Google Workspace
|
|
282
|
+
gam create user admin-jdoe@company.com firstname "John (Admin)" lastname "Doe" \
|
|
283
|
+
password "$(openssl rand -base64 32)" org "/Admins"
|
|
284
|
+
gam update user admin-jdoe@company.com admin on
|
|
285
|
+
|
|
286
|
+
# Require hardware security keys for the Admins OU
|
|
287
|
+
gam update org "/Admins" settings 2sv security_key_only
|
|
288
|
+
|
|
289
|
+
# AWS MFA enforcement policy
|
|
290
|
+
cat <<'EOF' > enforce-mfa-policy.json
|
|
291
|
+
{
|
|
292
|
+
"Version": "2012-10-17",
|
|
293
|
+
"Statement": [{
|
|
294
|
+
"Sid": "DenyUnlessMFA", "Effect": "Deny",
|
|
295
|
+
"NotAction": ["iam:CreateVirtualMFADevice","iam:EnableMFADevice",
|
|
296
|
+
"iam:GetUser","iam:ListMFADevices","sts:GetSessionToken"],
|
|
297
|
+
"Resource": "*",
|
|
298
|
+
"Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
|
|
299
|
+
}]
|
|
300
|
+
}
|
|
301
|
+
EOF
|
|
302
|
+
aws iam create-policy --policy-name EnforceMFA --policy-document file://enforce-mfa-policy.json
|
|
303
|
+
|
|
304
|
+
# Break-glass account for SSO outages
|
|
305
|
+
BREAK_GLASS_PW=$(openssl rand -base64 48)
|
|
306
|
+
gam create user breakglass@company.com firstname "Break" lastname "Glass" \
|
|
307
|
+
password "${BREAK_GLASS_PW}" org "/Admins" admin on
|
|
308
|
+
# Store password in a sealed envelope in a physical safe
|
|
309
|
+
# After every use: rotate password, re-seal, log the incident
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## 9. Data Loss Prevention
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# Google Drive — block external sharing and restrict viewers
|
|
318
|
+
gam update org "/" settings drive sharing_outside_domain off
|
|
319
|
+
gam update org "/" settings drive disable_download_print_copy_for_viewers on
|
|
320
|
+
|
|
321
|
+
# GitHub — enable secret scanning and push protection org-wide
|
|
322
|
+
gh api -X PATCH /orgs/{ORG} -f security_product=secret_scanning -f enablement=enable_all
|
|
323
|
+
gh api -X PATCH /orgs/{ORG} -f security_product=secret_scanning_push_protection -f enablement=enable_all
|
|
324
|
+
gh api /orgs/{ORG}/secret-scanning/alerts --paginate \
|
|
325
|
+
--jq '.[] | {repo: .repository.name, secret_type: .secret_type, state: .state}'
|
|
326
|
+
|
|
327
|
+
# Slack — restrict data export to org admins
|
|
328
|
+
curl -s -X POST -H "Authorization: Bearer ${SLACK_ADMIN_TOKEN}" \
|
|
329
|
+
-H "Content-Type: application/json" \
|
|
330
|
+
"https://slack.com/api/admin.teams.settings.setExportRestrictions" \
|
|
331
|
+
-d '{"team_id": "T0XXXXXXX", "export_type": "org_admins_only"}'
|
|
332
|
+
|
|
333
|
+
# AWS — block all public S3 access at account level
|
|
334
|
+
aws s3control put-public-access-block --account-id "${AWS_ACCOUNT_ID}" \
|
|
335
|
+
--public-access-block-configuration \
|
|
336
|
+
"BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## 10. Shadow IT Detection
|
|
342
|
+
|
|
343
|
+
### DNS-Based Discovery
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
SHADOW_IT_DOMAINS=("airtable.com" "notion.so" "trello.com" "asana.com"
|
|
347
|
+
"monday.com" "clickup.com" "figma.com" "canva.com" "miro.com"
|
|
348
|
+
"zapier.com" "dropbox.com" "box.com" "wetransfer.com")
|
|
349
|
+
for domain in "${SHADOW_IT_DOMAINS[@]}"; do
|
|
350
|
+
count=$(grep -c "${domain}" /var/log/dns/query.log 2>/dev/null || echo "0")
|
|
351
|
+
[ "${count}" -gt 0 ] && echo "DETECTED: ${domain} — ${count} queries"
|
|
352
|
+
done
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Google Workspace Login Audit
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
gam report login parameters app_name \
|
|
359
|
+
start_time "2026-03-01T00:00:00Z" end_time "2026-03-24T23:59:59Z" > login_audit.csv
|
|
360
|
+
gam report token > token_usage_report.csv
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Proxy Log Analysis
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
awk '{print $7}' /var/log/squid/access.log | sed 's|https\?://||;s|/.*||' \
|
|
367
|
+
| sort | uniq -c | sort -rn | head -50 > top_domains.txt
|
|
368
|
+
comm -23 <(awk '{print $2}' top_domains.txt | sort) \
|
|
369
|
+
<(yq '.tools[].domains[]' saas-inventory.yaml | sort) > unapproved.txt
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Automated Alerting
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
cat <<'SCRIPT' > /usr/local/bin/shadow-it-check.sh
|
|
376
|
+
#!/usr/bin/env bash
|
|
377
|
+
set -euo pipefail
|
|
378
|
+
APPROVED="/etc/security/approved-saas-domains.txt"
|
|
379
|
+
YESTERDAY=$(date -d "yesterday" +%d-%b-%Y)
|
|
380
|
+
grep "${YESTERDAY}" /var/log/dns/query.log | awk '{print $4}' | sort -u > /tmp/today.txt
|
|
381
|
+
NEW=$(comm -23 /tmp/today.txt <(sort "${APPROVED}"))
|
|
382
|
+
[ -n "${NEW}" ] && mail -s "[ALERT] Shadow IT" security@company.com <<< "${NEW}"
|
|
383
|
+
SCRIPT
|
|
384
|
+
chmod +x /usr/local/bin/shadow-it-check.sh
|
|
385
|
+
echo "0 8 * * * root /usr/local/bin/shadow-it-check.sh" >> /etc/cron.d/shadow-it-check
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Quick Reference — Top 10 Priority Actions
|
|
391
|
+
|
|
392
|
+
| # | Action | Scope |
|
|
393
|
+
|---|--------|-------|
|
|
394
|
+
| 1 | Enforce MFA/2FA everywhere | Google, GitHub, AWS, Slack |
|
|
395
|
+
| 2 | Enable SSO with your IdP | All tools |
|
|
396
|
+
| 3 | Audit and revoke OAuth grants | Google, GitHub |
|
|
397
|
+
| 4 | Require Slack app approval | Slack |
|
|
398
|
+
| 5 | Branch protection on main | GitHub |
|
|
399
|
+
| 6 | Secret scanning + push protection | GitHub |
|
|
400
|
+
| 7 | Block public S3 buckets | AWS |
|
|
401
|
+
| 8 | Enable org-wide CloudTrail | AWS |
|
|
402
|
+
| 9 | Disable external Drive sharing | Google |
|
|
403
|
+
| 10 | Create break-glass admin accounts | Google, AWS |
|
|
404
|
+
|
|
405
|
+
## Maintenance Cadence
|
|
406
|
+
|
|
407
|
+
**Weekly:** Review OAuth grants, secret scanning alerts, Slack app queue.
|
|
408
|
+
**Monthly:** AWS IAM report, rotate service keys, admin account review, shadow IT scan.
|
|
409
|
+
**Quarterly:** Full SaaS inventory refresh, OAuth pruning, break-glass test, SCP updates.
|
|
410
|
+
|
|
411
|
+
## Limitations
|
|
412
|
+
|
|
413
|
+
- Infrastructure commands can disrupt services: confirm target host/scope and have backups/snapshots before mutating state.
|
|
414
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
415
|
+
|