Brakeman + auditdude

What Brakeman misses in your Rails app

Brakeman is the best free thing that ever happened to Rails security. Keep it in CI. It flags the code shapes it has rules for, and it has no idea what your app is supposed to do. That second part is where the expensive bugs live.

Scan your first repo free

No credit card · read-only access · keep Brakeman in CI

checkouts_controller.rb pushed just now
22
def create
23
  amount = params[:amount].to_i
24
  Stripe::Charge.create(amount: amount,
25
    currency: "usd", customer: current_user.stripe_id)
26
end

$ bundle exec brakeman

0 warnings · no rule for this

auditdude

High · Business logic — checkout trusts the client's price

Keep using it

Sixty seconds, zero dollars.

Brakeman has been scanning Rails apps since 2010 and knows every classic Rails footgun: string interpolation in queries, html_safe on user input, shell commands built from params. If it isn't in your CI yet, add it today. Nothing on this page says otherwise.

brakeman · rails anti-patterns Covered
SQL injection interpolated where / order
Cross-site scripting raw, html_safe on input
Command injection system, backticks, exec
Mass assignment permit!, open params

The gap

It matches patterns. It can't read intent.

Every Brakeman warning is a rule someone wrote for a shape of code: dangerous sink, user input, warn. But the worst Rails bugs aren't shaped wrong. A checkout that takes its price from the client looks like perfectly normal Rails. It's wrong in a way you only see by knowing what the app is for.

Vulnerability Brakeman auditdude
SQL injection via string interpolation
XSS through html_safe and raw
Command injection from params
Missing authorization (IDOR)
Tenant isolation across accounts
Business logic: prices, quantities, state
The JavaScript half of your app
Findings verified before you see them

The overlap costs you nothing, Brakeman runs in seconds. The bottom half is what nothing else is watching.

Why it matters

A warning is not a finding.

Brakeman reports in confidence levels: high, medium, weak. That's honest of it. A pattern matcher can't check whether the thing it flagged is reachable, already scoped, or mitigated two methods up. So a person reads the warnings, and the brakeman.ignore file grows.

auditdude does that reading for you. Claude follows the data flow through your real code, and anything that doesn't hold up never reaches you.

Brakeman's lane

Rails anti-patterns

Shapes of code known to go wrong, flagged with a confidence score for you to check.

auditdude's lane

What your app is supposed to allow

Who may see what, who may change what, what a request is allowed to cost.

Better together

Keep the fast one. Add the thorough one.

Brakeman runs in seconds and costs nothing. auditdude takes a few minutes and reads everything. Run both; they'll never argue.

Brakeman

Static rules, instant feedback. Catches the classic Rails mistakes before the commit even leaves CI. Keep it on.

auditdude

Claude reads your source on every push, follows the auth and the money, and opens the fix as a PR.

Closing the gap

It lives in your pull requests, like Brakeman lives in CI.

Connect a repo with read-only access. From then on it runs where you already work.

01

Scans every push

auditdude reads your source with Claude on every push and pull request, not once a year before an audit.

02

Comments the exact line

Each verified finding lands as an inline comment on the vulnerable line in your PR, with the severity and the fix.

03

Opens the fix as a PR

Review, run your tests, merge. Works on the Rails side and on everything else in the repo.

FAQ

Brakeman, answered.

Is Brakeman enough to secure a Rails application?

It's a strong baseline and you should run it, but it only flags code shapes it has rules for: interpolated SQL, html_safe on user input, shell commands built from params. It doesn't know which records a user should be able to reach or what a checkout should cost, so authorization and business-logic flaws pass through silently. Those are the bugs that tend to end up in breach write-ups.

Does Brakeman check for missing authorization or IDOR?

No. Brakeman has no model of your users, roles, or tenants, so it can't tell an intentional public endpoint from a forgotten authorization check. Catching an IDOR means understanding what the application is supposed to allow, which takes reading the app, not matching patterns.

Should I keep running Brakeman if I use auditdude?

Yes. It's free, it runs in seconds, and it catches the classic Rails mistakes right in CI. auditdude covers what Brakeman structurally can't: authorization, tenant isolation, business logic, and every language in your repo that isn't Ruby.

How is auditdude different from Brakeman's confidence levels?

Brakeman tells you how confident it is and leaves the checking to you, which is why brakeman.ignore files grow over time. auditdude verifies each candidate finding against your actual code first: whether it's reachable, whether something upstream already mitigates it. If it doesn't hold up, you never see it.

Get started

Keep Brakeman. Add something that reads.

Connect a repo and read your first findings ten minutes from now. No credit card, read-only access, revoke anytime.