v0.15.0 · reads your cloud, changes nothing

RAQIB

Read Only Cloud Exposure Auditor

راقب · one who watches over

Point Raqib at the cloud you are signed in to. It reads your authorization configuration with read only calls, then reports the moves an intruder would make after a foothold, each with the change that closes it. The defensive mirror of an offensive framework, across AWS, Azure, GCP, and Kubernetes.

raqib.sh
$ ./raqib.sh read only cloud exposure auditor v0.15.0 reads your cloud, reports the exposure, changes nothing AWS exposure report 16 findings 3 critical 9 high 4 medium 0 low [critical] Administrator by wildcard permission (user break-glass) [critical] Role can be assumed by anyone (role public-assumable) [high] Can pass a role to a new Lambda function (user ci-deployer) fix: Scope iam:PassRole to specific roles, and separate it from create. [medium] Can export the entire IAM configuration (user recon-bot)
the line that defines it

It reads. It never acts.

Raqib audits. Where the offensive framework it mirrors performs the escalation, plants the persistence, and pulls the data, Raqib only reads the configuration that would let those happen, and tells you to close it. Nothing it does changes a cloud.

get · list · describe

Only read calls

Every call Raqib makes lists or describes authorization configuration. It has no code path that writes, and a guard refuses any command that is not one of the read only gather calls.

no writes

Changes nothing

Raqib never creates, updates, or deletes a policy, a role, a binding, or anything else. You can run it against production and the account is exactly as it was.

no data read

Never reads your data

An exfiltration finding checks whether a principal is allowed to read every secret. It never calls the API that returns the secret. The check is on the grant, not the data.

The guard, in src/lib/utils.sh, allows only iam get-account-authorization-details, az role assignment / definition list, gcloud projects get-iam-policy, and kubectl get for RBAC. Anything else is refused, so a wrong turn cannot change a cloud.
the name

راقب, one who watches over

Raqib is Arabic for one who watches over, the observer who keeps watch, from the root ر ق ب, to watch and keep watch over. The name is the idea of the tool. A raqib watches and reports what it sees, it does not act. Raqib observes your cloud with read only calls and never touches it. A watcher, not an actor.

six tactics, read for defense

The path an intruder walks, closed first

An attacker who lands one set of credentials maps the account, turns access into more, plants something to keep it, reaches the next principal, pulls data out, and turns off the logging. Raqib walks those same paths in your account and reports where each one is open.

see it on a real account

Explore a scan

These are the findings Raqib produces on deliberately built example accounts, the same output the tool prints. Switch the cloud, compare an exposed account with a clean one, and filter by severity. Open the full report, all 79 findings across four clouds →

./raqib.sh defends

What Raqib checks, by cloud and tactic

The checks are a matrix under src/modules, named {tactic}_{cloud}.sh, the same six tactics the offensive framework runs, so the defense maps onto the offense one for one.

four clouds, one lookout

Each cloud, read natively

Each cloud has its own authorization model, so Raqib reads each one natively and reports the same six tactics in that cloud's own terms.

AWS

IAM policies, inline, attached, and group, with permissions boundaries.

iam get-account-authorization-details
Azure

RBAC role assignments joined to role definitions, across actions and dataActions.

az role assignment list · role definition list
GCP

IAM policy bindings, resolved to members with predefined and custom roles.

gcloud projects get-iam-policy
Kubernetes

Roles and ClusterRoles resolved to subjects through their bindings.

kubectl get clusterroles,roles,bindings
how it is built

Bash and jq, mirroring the offense

Directory layout

raqib.sh                 the launcher
src/lib/
  cloud_detect.sh        detect and gather, read only
  utils.sh               the read only guard
  model_{cloud}.jq         one model per cloud
src/modules/
  {tactic}_{cloud}.sh      the 24 checks
src/report.sh            terminal and json output
raqib/                   zero dependency python engine
  for offline review, SARIF, and the
  AWS credential report

Design principles

  • Read only. Lists and describes, never writes, never reads a secret value.
  • Live, no files. Point it at a cloud you are signed in to and it reads the config itself.
  • A cloud by tactic matrix. Modules named {tactic}_{cloud} map onto the offensive framework module for module.
  • Parity. The bash scanner and the python engine agree, finding for finding, on every sample.
  • Every finding carries its fix and the MITRE ATT&CK technique it defends against.
run it

Point it at your cloud

Sign in the way you already do, then run Raqib. It needs jq and the CLI for the cloud you scan. Nothing else.

Terminal
# clone and scan whatever cloud you are signed in to
git clone https://github.com/SiteQ8/Raqib.git
cd Raqib
./raqib.sh

# one named cloud, and a build gate that fails on critical or high
./raqib.sh --cloud aws
./raqib.sh scan --strict

# the whole cloud by tactic map, and offline review of a saved export
./raqib.sh defends
./raqib.sh scan --offline export.json