GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration
oesa-2026-3865
Vulnerability from osv_openeuler
Published
2026-09-14 16:35
Modified
2026-09-14 16:35
Summary
ruby security update
Details

Ruby is a fast and easy interpreted scripting language for object-oriented programming. It has many functions for processing text Files and perform system management tasks (such as Perl).

Security Fix(es):

An issue was discovered in the resolv gem before 0.7.2 for Ruby. Resolv::DNS::MessageEncoder wrote a DNS label's length into a single octet without checking its range. A label longer than 255 octets had its length stored modulo 256 but the label data was written unchanged, and thus the bytes on the wire described a different name than the one the application asked to encode. RFC 1035 section 2.3.4 limits a label to 63 octets, and the two high bits of the length octet are reserved for compression pointers. put_string packed the length with put_pack("C", d.length) and put_label used it for labels, and thus any value from 0 to 255 could end up as a label length octet, including the reserved 0x40-0xBF range and the 0xC0-0xFF pointer range. Resolv::DNS::Name.create did not check per-label or total name length either, and thus an attacker-controlled hostname reached the encoder unchanged. An application that resolves an attacker-controlled hostname sends a query whose wire bytes name a domain the attacker chose. A hostname suffix that the application validates against an allowlist becomes padding that never appears on the wire, and thus allowlist and egress checks can be bypassed. The recursive resolver caches the response under the attacker's name, and DNS logs record that name rather than the one the application asked for. A label length whose low octet lands in the 0xC0-0xFF range produces a length octet that conforming parsers read as the start of a compression pointer, with the following attacker-controlled byte as the offset.(CVE-2026-80213)

RubyGems fails to re-validate path containment after filesystem symlink resolution during gem extraction. When a pre-existing symlink inside the destination directory points outside the extraction root, extracted files that appear to be written under the destination directory can instead be written outside of it, breaking the extraction safety boundary. The fix resolves the real path of the parent directory before writing and raises Gem::Package::PathError if it escapes the destination directory.(CVE-2026-82455)


{
  "affected": [
    {
      "ecosystem_specific": {
        "aarch64": [
          "ruby-2.5.8-144.oe2003sp4.aarch64.rpm",
          "ruby-debuginfo-2.5.8-144.oe2003sp4.aarch64.rpm",
          "ruby-debugsource-2.5.8-144.oe2003sp4.aarch64.rpm",
          "ruby-devel-2.5.8-144.oe2003sp4.aarch64.rpm",
          "rubygem-bigdecimal-1.3.4-144.oe2003sp4.aarch64.rpm",
          "rubygem-io-console-0.4.6-144.oe2003sp4.aarch64.rpm",
          "rubygem-json-2.1.0-144.oe2003sp4.aarch64.rpm",
          "rubygem-openssl-2.1.2-144.oe2003sp4.aarch64.rpm",
          "rubygem-psych-3.0.2-144.oe2003sp4.aarch64.rpm"
        ],
        "noarch": [
          "ruby-help-2.5.8-144.oe2003sp4.noarch.rpm",
          "ruby-irb-2.5.8-144.oe2003sp4.noarch.rpm",
          "rubygem-did_you_mean-1.2.0-144.oe2003sp4.noarch.rpm",
          "rubygem-minitest-5.10.3-144.oe2003sp4.noarch.rpm",
          "rubygem-net-telnet-0.1.1-144.oe2003sp4.noarch.rpm",
          "rubygem-power_assert-1.1.1-144.oe2003sp4.noarch.rpm",
          "rubygem-rake-12.3.0-144.oe2003sp4.noarch.rpm",
          "rubygem-rdoc-6.0.1.1-144.oe2003sp4.noarch.rpm",
          "rubygem-test-unit-3.2.7-144.oe2003sp4.noarch.rpm",
          "rubygem-xmlrpc-0.3.0-144.oe2003sp4.noarch.rpm",
          "rubygems-2.7.6-144.oe2003sp4.noarch.rpm",
          "rubygems-devel-2.7.6-144.oe2003sp4.noarch.rpm"
        ],
        "src": [
          "ruby-2.5.8-144.oe2003sp4.src.rpm"
        ],
        "x86_64": [
          "ruby-2.5.8-144.oe2003sp4.x86_64.rpm",
          "ruby-debuginfo-2.5.8-144.oe2003sp4.x86_64.rpm",
          "ruby-debugsource-2.5.8-144.oe2003sp4.x86_64.rpm",
          "ruby-devel-2.5.8-144.oe2003sp4.x86_64.rpm",
          "rubygem-bigdecimal-1.3.4-144.oe2003sp4.x86_64.rpm",
          "rubygem-io-console-0.4.6-144.oe2003sp4.x86_64.rpm",
          "rubygem-json-2.1.0-144.oe2003sp4.x86_64.rpm",
          "rubygem-openssl-2.1.2-144.oe2003sp4.x86_64.rpm",
          "rubygem-psych-3.0.2-144.oe2003sp4.x86_64.rpm"
        ]
      },
      "package": {
        "ecosystem": "openEuler:20.03-LTS-SP4",
        "name": "ruby",
        "purl": "pkg:rpm/openEuler/ruby\u0026distro=openEuler-20.03-LTS-SP4"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "2.5.8-144.oe2003sp4"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "database_specific": {
    "severity": "Medium"
  },
  "details": "Ruby is a fast and easy interpreted scripting language for object-oriented programming. It has many functions for processing text Files and perform system management tasks (such as Perl).\r\n\r\nSecurity Fix(es):\n\nAn issue was discovered in the resolv gem before 0.7.2 for Ruby. Resolv::DNS::MessageEncoder wrote a DNS label\u0026apos;s length into a single octet without checking its range. A label longer than 255 octets had its length stored modulo 256 but the label data was written unchanged, and thus the bytes on the wire described a different name than the one the application asked to encode. RFC 1035 section 2.3.4 limits a label to 63 octets, and the two high bits of the length octet are reserved for compression pointers. put_string packed the length with put_pack(\u0026quot;C\u0026quot;, d.length) and put_label used it for labels, and thus any value from 0 to 255 could end up as a label length octet, including the reserved 0x40-0xBF range and the 0xC0-0xFF pointer range. Resolv::DNS::Name.create did not check per-label or total name length either, and thus an attacker-controlled hostname reached the encoder unchanged. An application that resolves an attacker-controlled hostname sends a query whose wire bytes name a domain the attacker chose. A hostname suffix that the application validates against an allowlist becomes padding that never appears on the wire, and thus allowlist and egress checks can be bypassed. The recursive resolver caches the response under the attacker\u0026apos;s name, and DNS logs record that name rather than the one the application asked for. A label length whose low octet lands in the 0xC0-0xFF range produces a length octet that conforming parsers read as the start of a compression pointer, with the following attacker-controlled byte as the offset.(CVE-2026-80213)\n\nRubyGems fails to re-validate path containment after filesystem symlink resolution during gem extraction. When a pre-existing symlink inside the destination directory points outside the extraction root, extracted files that appear to be written under the destination directory can instead be written outside of it, breaking the extraction safety boundary. The fix resolves the real path of the parent directory before writing and raises Gem::Package::PathError if it escapes the destination directory.(CVE-2026-82455)",
  "id": "OESA-2026-3865",
  "modified": "2026-09-14T16:35:08Z",
  "published": "2026-09-14T16:35:08Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3865"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-80213"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-82455"
    }
  ],
  "schema_version": "1.7.2",
  "severity": [
    {
      "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N",
      "type": "CVSS_V4"
    }
  ],
  "summary": "ruby security update",
  "upstream": [
    "CVE-2026-80213",
    "CVE-2026-82455"
  ]
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…