Ruby Gen 2

Note: Gen 1 is the default detection engine for existing customers. Please reach out to your Customer Success Manager at Mend.io to upgrade to Gen 2.

This article covers Ruby support and vulnerability detection for Mend SAST.

Mend SAST-supported Ruby file types

File Type

.erb *

.rb

.rhtm *

.rhtml *

* Note: These extensions are marked as ‘Secondary’ file extensions.
They will only be scanned if at least one file with any of the other ‘Primary’ file extensions is present to identify the language as the relevant language.

Mend SAST-supported Ruby frameworks

Framework

CWE-22 (Path Traversal): Ruby core/stdlib (File, Dir, Kernel, IO, Pathname, Tempfile, FileUtils, CSV, YAML/Psych, Zlib); Rack, Sinatra, Roda, Hanami::Controller, Grape (web frameworks); Rails ActionPack/ActiveStorage; RubyZip, Archive::Zip, Archive::Tar::Minitar (archive extraction); CarrierWave, Shrine, Paperclip (file-upload libraries)

CWE-78 (Command Injection): Ruby core/stdlib (Kernel backtick/system/exec/spawn, Open3, PTY, Process, Shellwords, IO.popen); mixlib-shellout, posix-spawn, subprocess, tty-command, terrapin (shell-execution wrappers); net-ssh, sshkit (remote command execution)

CWE-79 (XSS): Rack, Sinatra, Roda, Grape (routing/web frameworks); Rails (ActionView, ActionPack/ActionDispatch, ActiveSupport); Hanami (View, Controller); CGI, ERB (stdlib); ActionView-adjacent template engines; Phlex (component-based view templating, unsafe_raw); Redcarpet (Markdown-to-HTML rendering); Liquid (template engine)

CWE-89 (SQL Injection): ActiveRecord, Arel (Rails ORM); Sequel (incl. raw Sequel.lit); ROM (rom-rb); DataObjects, DBI; raw DB drivers — mysql/mysql2, pg, sqlite3, oci8, tiny_tds

CWE-90 (LDAP Injection): net-ldap, ruby-ldap; devise_ldap_authenticatable, omniauth-ldap (LDAP-backed auth gems)

CWE-94 (Code Injection): Ruby core (Kernel#eval, BasicObject#instance_eval, Module#class_eval/#module_eval, Binding#eval); the send-family payload leg (send/__send__/public_send/try arg #2, when arg #1 is a code evaluator); Ruby core metaprogramming (define_method, alias_method, instance_variable_set/_get, const_get/const_set, attr_*); Rails ActiveSupport constantize/safe_constantize; ERB, Erubi, Erubis, Tilt, Haml (template-engine code generation); Rails ActionPack (AbstractController), ActionView (render inline:)

CWE-295 (Improper Certificate Validation): curb, Faraday, httpclient, httpx, mechanize, net/http (stdlib), rest-client, Savon

CWE-327 (Weak Crypto): OpenSSL (stdlib); ruby-jwt, json-jwt (JWT signing/verification); ruby-rc4 (RC4 cipher); symmetric-encryption, encryptor (encryption wrapper gems); Rails ActiveSupport (MessageEncryptor/MessageVerifier)

CWE-328 (Weak Hash): Digest (stdlib: MD5/SHA1); OpenSSL (stdlib); Rails ActiveSupport digest helpers

CWE-400 (Sleep DoS): Ruby stdlib (Kernel#sleep, Thread, Thread::Mutex, Thread::ConditionVariable, Thread::Queue/SizedQueue, IO, Net::HTTP); Timeout (stdlib); concurrent-ruby; Faraday; http.rb; connection_pool. ActiveSupport's Numeric#seconds/#minutes/#hours/#days are recognized as taint-preserving transformers feeding these sinks, not sinks themselves.

CWE-502 (Deserialization of Untrusted Data): Ruby core Marshal; YAML/Psych, JSON/Oj (unsafe load); PStore (stdlib); ActiveSupport Hash-based coders; RocketAMF; Plist; php-serialize (PHP-format deserialization); delayed_job (YAML/Psych-backed job payloads)

CWE-601 (Open Redirect): Rack, Sinatra, Roda, Cuba, Padrino (padrino-core), Grape, Hanami::Controller (web frameworks); Rails ActionPack; OmniAuth

CWE-611 (XXE): Nokogiri (Nokogiri::XML/Document/Reader/DocumentFragment parse-input entry points); libxml-ruby (LibXML::XML::Document/Parser/Reader)

CWE-643 (XPath Injection): Nokogiri, REXML (stdlib, incl. REXML::XPath), Ox, Oga, libxml-ruby, the xpath gem; Capybara, Mechanize (as XPath-query call sites)

CWE-798 (Hard-Coded Credentials): Ruby core (File, IO); Net::POP3, Net::SMTP, Net::FTP, Net::IMAP, Net::LDAP/ruby-ldap (net-* stdlib/gems); pg, mysql (raw DB drivers); Elasticsearch client gem; Faraday; rack-test

CWE-918 (Server-Side Request Forgery): stdlib: net/http, open-uri. Third-party HTTP clients: async-http, curb, em-http-request, excon, Faraday, http.rb, HTTParty, httpclient, httpx, Patron, rest-client, Typhoeus. Fetch wrappers / Rails integrations: ActiveResource, CarrierWave, Down, Mechanize, Shrine

CWE-943 (NoSQL Injection): Mongo, Mongoid + BSON (MongoDB); Redis + redis-client; Elasticsearch::API/OpenSearch-Ruby, Elasticsearch::Model, Searchkick, Chewy (Elasticsearch/OpenSearch); aws-sdk-dynamodb + Dynamoid (DynamoDB); cassandra-driver + Cequel (Cassandra); neo4j-ruby-driver + ActiveGraph (Neo4j); Couchbase + Couchbase-ORM; Google Cloud Firestore + Google Cloud Datastore; Plucky + MongoMapper (delegated MongoDB DSLs); RSolr + Sunspot (Solr); InfluxDB + influxdb-client; NoBrainer + RethinkDB; Riak-client; ArangoRB (ArangoDB AQL); Rails ActionController, Roda, Padrino (as call-site frameworks, not the injected store)

CWE-1333 (ReDoS): Regexp engine via CGI, ERB, StringScanner (strscan) call sites (stdlib)

Mend SAST-supported Ruby vulnerability types

The Ruby vulnerability types detected by SAST are provided below and are organized by CWE ID within each of their identified severities.

Ruby high-severity vulnerability types

CWE

Vulnerability Type

Low Probability Impact

CWE-22

Path Traversal

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-78

Command Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-79

XSS

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-89

SQL Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-94

Code Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-502

Deserialization of Untrusted Data

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-643

XPath Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-918

Server-Side Request Forgery

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-943

NoSQL Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

Ruby medium-severity vulnerability types

CWE

Vulnerability Type

Low Probability Impact

CWE-90

LDAP Injection

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-295

Improper Certificate Validation

  • UNAFFECTED

CWE-327

Weak Crypto

  • UNAFFECTED

CWE-400

Sleep DoS

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-611

XXE

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-798

Hard-Coded Credentials

Additional Taint Sources: Assignments of hard-coded strings to variables/attributes with credential-like names (password, secret, apikey, token, …) or credential-shaped values — no high-probability counterpart

Ruby low-severity vulnerability types

CWE

Vulnerability Type

Low Probability Impact

CWE-328

Weak Hash

  • UNAFFECTED

CWE-601

Open Redirect

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)

CWE-1333

ReDoS

Additional Taint Sources: Content from files and streams, databases, environment (command line calls, main method arguments, environment variables, configurations, url access)