By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.
ToolAccuracy of FindingsDetects Non-Pattern-Based Issues?Coverage of SAST FindingsSpeed of ScanningUsability & Dev Experience
DryRun SecurityVery high – caught multiple critical issues missed by othersYes – context-based analysis, logic flaws & SSRFBroad coverage of standard vulns, logic flaws, and extendableNear real-time PR feedback
Snyk CodeHigh on well-known patterns (SQLi, XSS), but misses other categoriesLimited – AI-based, focuses on recognized vulnerabilitiesGood coverage of standard vulns; may miss SSRF or advanced auth logic issuesFast, often near PR speedDecent GitHub integration, but rules are a black box
GitHub Advanced Security (CodeQL)Very high precision for known queries, low false positivesPartial – strong dataflow for known issues, needs custom queriesGood for SQLi and XSS but logic flaws require advanced CodeQL experience.Moderate to slow (GitHub Action based)Requires CodeQL expertise for custom logic
SemgrepMedium, but there is a good community for adding rulesPrimarily pattern-based with limited dataflowDecent coverage with the right rules, can still miss advanced logic or SSRFFast scansHas custom rules, but dev teams must maintain them
SonarQubeLow – misses serious issues in our testingLimited – mostly pattern-based, code quality orientedBasic coverage for standard vulns, many hotspots require manual reviewModerate, usually in CIDashboard-based approach, can pass “quality gate” despite real vulns
Vulnerability ClassSnyk (partial)GitHub (CodeQL) (partial)SemgrepSonarQubeDryRun Security
SQL Injection
*
Cross-Site Scripting (XSS)
SSRF
Auth Flaw / IDOR
User Enumeration
Hardcoded Token
ToolAccuracy of FindingsDetects Non-Pattern-Based Issues?Coverage of C# VulnerabilitiesScan SpeedDeveloper Experience
DryRun Security
Very high – caught all critical flaws missed by others
Yes – context-based analysis finds logic errors, auth flaws, etc.
Broad coverage of OWASP Top 10 vulns plus business logic issuesNear real-time (PR comment within seconds)Clear single PR comment with detailed insights; no config or custom scripts needed
Snyk CodeHigh on known patterns (SQLi, XSS), but misses logic/flow bugsLimited – focuses on recognizable vulnerability patterns
Good for standard vulns; may miss SSRF or auth logic issues 
Fast (integrates into PR checks)Decent GitHub integration, but rules are a black box (no easy customization)
GitHub Advanced Security (CodeQL)Low - missed everything except SQL InjectionMostly pattern-basedLow – only discovered SQL InjectionSlowest of all but finished in 1 minuteConcise annotation with a suggested fix and optional auto-remedation
SemgrepMedium – finds common issues with community rules, some missesPrimarily pattern-based, limited data flow analysis
Decent coverage with the right rules; misses advanced logic flaws 
Very fast (runs as lightweight CI)Custom rules possible, but require maintenance and security expertise
SonarQube
Low – missed serious issues in our testing
Mostly pattern-based (code quality focus)Basic coverage for known vulns; many issues flagged as “hotspots” require manual review Moderate (runs in CI/CD pipeline)Results in dashboard; risk of false sense of security if quality gate passes despite vulnerabilities
Vulnerability ClassSnyk CodeGitHub Advanced Security (CodeQL)SemgrepSonarQubeDryRun Security
SQL Injection (SQLi)
Cross-Site Scripting (XSS)
Server-Side Request Forgery (SSRF)
Auth Logic/IDOR
User Enumeration
Hardcoded Credentials
VulnerabilityDryRun SecuritySemgrepGitHub CodeQLSonarQubeSnyk Code
1. Remote Code Execution via Unsafe Deserialization
2. Code Injection via eval() Usage
3. SQL Injection in a Raw Database Query
4. Weak Encryption (AES ECB Mode)
5. Broken Access Control / Logic Flaw in Authentication
Total Found5/53/51/51/50/5
VulnerabilityDryRun SecuritySnykCodeQLSonarQubeSemgrep
Server-Side Request Forgery (SSRF)
(Hotspot)
Cross-Site Scripting (XSS)
SQL Injection (SQLi)
IDOR / Broken Access Control
Invalid Token Validation Logic
Broken Email Verification Logic
DimensionWhy It Matters
Surface
Entry points & data sources highlight tainted flows early.
Language
Code idioms reveal hidden sinks and framework quirks.
Intent
What is the purpose of the code being changed/added?
Design
Robustness and resilience of changing code.
Environment
Libraries, build flags, and infra metadata flag, infrastructure (IaC) all give clues around the risks in changing code.
KPIPattern-Based SASTDryRun CSA
Mean Time to Regex
3–8 hrs per noisy finding set
Not required
Mean Time to Context
N/A
< 1 min
False-Positive Rate
50–85 %< 5 %
Logic-Flaw Detection
< 5 %
90%+
Contextual Security Analysis
June 10, 2025

Natural Language Code Policies in Action: Real‑World Lessons

The hardest problems in application security today are context-dependent. Authorization issues, PII data leaks, YAML mis-configurations in prod. Where code is run, why it was written, and what purpose it serves all make a huge difference in how much risk is being introduced to your codebase. 

Natural Language Code Policies (NLCPs) let you phrase a security rule exactly the way you’d say it in a design review—“Does this endpoint require admin rights?”—and have DryRun enforce that rule every time a developer opens a pull request. Instead of guessing with brittle regular expressions, our Contextual Security Analysis engine translates plain-English rules into precise, always-up-to-date checks.

Here are three examples:

1. Authorization Gaps in a Rails Admin Controller

Customer policy: “If this is a new API endpoint, does it have proper authorization?”

A fintech customer relies on the Pundit gem for role‑based access control. When they added a new admin controller, DryRun Security flagged the pull request because the action skipped authorize entirely:

# app/controllers/admin/sso_controller.rb
class Admin::SsoController < ApplicationController  
  include Pundit::Authorization  # Pundit wired in globally‍  
  
  def add_client_secret    
    # 🚩 missing `authorize`    
    secret = params[:secret]    
    ClientSecret.create!(secret: secret)    
    render json: { status: 'ok' }  
  end
end

DryRun Security finding:

Because the policy triggered during the code review, the team fixed the issue before it reached staging, avoiding a bug‑bounty payout and reinforcing the habit of always calling authorize.

2. Hidden Landmines in GitHub Actions and IaC

Customer policy: “Does this change pose any security risk to GitHub Actions config?”

YAML pipelines are code, and misconfigurations can quietly grant attackers broad privileges. After a SaaS team tweaked its deployment workflow, DryRun Security produced this assessment:

A fragment of the workflow reveals the problems:

jobs:  
  deploy:    
    runs-on: ubuntu-latest    
   steps:      
     - name: Deploy        
       run: |          
         echo "Deploying ${{ github.event.inputs.tag }}"  # unsanitized          
         aws s3 cp build.zip s3://$BUCKET/ --profile $AWS_PROFILE		
            --- REDACTED ---

One plain‑English policy caught four distinct vulnerability classes. Refactoring the YAML took minutes; cleaning up leaked credentials in production would have taken days.

3. Preventing PII from Sneaking into Logs

Customer policy: “Is any sensitive data, including personally identifiable information (PII), being sent to logs?”

While debugging a flaky test suite, an e‑commerce team started dumping full user states, including emails, into CSV files that were later uploaded to CI logs. DryRun intervened:

The developers moved the artifacts to a private S3 bucket and scrubbed PII before log emission. The fix took less than an hour. A breach notification would have taken weeks.

Why NLCPs Beat Pattern Matching

New to NLCPs? Start with the launch announcement or download the ready‑to‑go NLCP Starter Pack.

Pattern‑matching rules treat code as plain text. NLCPs treat code as context—tracking function calls, data flow, and configuration to decide whether a change is safe. That means fewer false positives, faster feedback, and problems discovered when the cost of change is lowest.

Try It Yourself

  1. Check out the NLCP Starter Pack.
  2. Drop a policy file into your repository.
  3. Push a branch and watch DryRun Security surface meaningful findings right in the review.

Context beats patterns—commit after commit.