DEV Community

Cover image for Ruby Deserialization Security: RCE Risks, Kubernetes Auditing & Fixes
Naveed Ahmed
Naveed Ahmed

Posted on Originally published at blog.naveedkumbhar.com

Ruby Deserialization Security: RCE Risks, Kubernetes Auditing & Fixes

Originally published on Naveed Ahmed's Engineering Blog.

๐Ÿšจ Could a serialized object become a security problem in your Ruby application?

Ruby provides powerful object serialization features, but accepting serialized data from untrusted sources can introduce serious security risks.

For DevOps and SRE engineers, the challenge isn't just finding a vulnerable code path. It's identifying every service, container, and background worker that might process unsafe input.

Here's a practical approach.

1. Why Ruby Deserialization Matters

Ruby's Marshal module can serialize and reconstruct Ruby objects.

For example:

data = Marshal.dump({ user: "demo" })
result = Marshal.load(data)
Enter fullscreen mode Exit fullscreen mode

This is suitable only when the serialized data comes from a trusted source.

Using Marshal.load with untrusted data can expose applications to dangerous object-loading behavior.

The key question is whether an attacker can control the input passed to the deserializer.

2. Where Should You Look?

Review applications and components that handle serialized objects:

  • Ruby on Rails services
  • Background workers and job queues
  • Cache and session integrations
  • Internal APIs receiving binary data
  • Third-party libraries that deserialize objects

Don't assume every Rails or Sidekiq deployment uses unsafe deserialization. Inspect your actual code paths and dependencies.

3. Audit Ruby Workloads in Kubernetes

Start by identifying your running application images:

kubectl get pods -A \
  -o custom-columns='NAMESPACE:.metadata.namespace,POD:.metadata.name,IMAGES:.spec.containers[*].image'
Enter fullscreen mode Exit fullscreen mode

Check a candidate Ruby container:

kubectl exec -n production deploy/rails-api \
  -c web -- ruby -v
Enter fullscreen mode Exit fullscreen mode

This tells you which runtime is running, but does not establish whether an application is exploitable.

To inspect your codebase, search for deserialization calls:

grep -RInE 'Marshal\.(load|restore)' \
  --include='*.rb' app lib
Enter fullscreen mode Exit fullscreen mode

Review each match to determine where the data originates.

4. Scan Container Images

Trivy can help identify known vulnerabilities in application images:

trivy image --scanners vuln \
  --severity HIGH,CRITICAL \
  registry.example.com/rails-api:production
Enter fullscreen mode Exit fullscreen mode

For larger environments, use Software Bills of Materials (SBOMs) to track dependencies.

Remember that automated scanners may not detect application-level insecure deserialization patterns.

You need both dependency scanning and code review.

5. Production Hardening

A safer approach includes:

  1. Avoiding Marshal deserialization of untrusted input.
  2. Using JSON or another appropriate format for external data.
  3. Validating application inputs.
  4. Updating Ruby and application dependencies.
  5. Rebuilding and redeploying affected containers.
  6. Applying least-privilege security controls.
  7. Monitoring suspicious behavior and unexpected crashes.

Ingress and WAF rules may provide additional protection for specific paths, but they cannot guarantee safety if unsafe deserialization occurs inside application workers.


Read the Complete Ruby Security Guide

My full article discusses Ruby2Shell claims, Ruby object deserialization, Kubernetes auditing, container scanning, and production hardening.

Read the Ruby2Shell Technical Guide

Note: The specific CVE-2026-113840 vulnerability details and claimed patch versions have not yet been independently confirmed through an official Ruby advisory.


Final Thoughts

A running container and a successful vulnerability scan don't necessarily mean your application is safe.

Security also depends on how data enters your application and what happens when that data is processed.

How does your team identify unsafe deserialization in Ruby applications?

Share your approach in the comments.


Written by Naveed Ahmed โ€” Lead DevOps & Platform Architect

Engineering Blog | GitHub | LinkedIn

Top comments (0)