<?xml version="1.0" encoding="UTF-8"?>
<cvrfdoc xmlns="http://www.icasi.org/CVRF/schema/cvrf/1.1" xmlns:cvrf="http://www.icasi.org/CVRF/schema/cvrf/1.1">
	<DocumentTitle xml:lang="en">An update for ruby is now available for openEuler-24.03-LTS-SP1</DocumentTitle>
	<DocumentType>Security Advisory</DocumentType>
	<DocumentPublisher Type="Vendor">
		<ContactDetails>openeuler-security@openeuler.org</ContactDetails>
		<IssuingAuthority>openEuler security committee</IssuingAuthority>
	</DocumentPublisher>
	<DocumentTracking>
		<Identification>
			<ID>openEuler-SA-2026-3668</ID>
		</Identification>
		<Status>Final</Status>
		<Version>1.0</Version>
		<RevisionHistory>
			<Revision>
				<Number>1.0</Number>
				<Date>2026-09-05</Date>
				<Description>Initial</Description>
			</Revision>
		</RevisionHistory>
		<InitialReleaseDate>2026-09-05</InitialReleaseDate>
		<CurrentReleaseDate>2026-09-05</CurrentReleaseDate>
		<Generator>
			<Engine>openEuler SA Tool V1.0</Engine>
			<Date>2026-09-05</Date>
		</Generator>
	</DocumentTracking>
	<DocumentNotes>
		<Note Title="Synopsis" Type="General" Ordinal="1" xml:lang="en">ruby security update</Note>
		<Note Title="Summary" Type="General" Ordinal="2" xml:lang="en">An update for ruby is now available for openEuler-24.03-LTS-SP1</Note>
		<Note Title="Description" Type="General" Ordinal="3" xml:lang="en">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):

Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, several Net::IMAP commands accept a &quot;raw data&quot; argument that is sent verbatim after validation to prevent command injection. However, if a server does not support non-synchronizing literals, it may still be possible to inject arbitrary IMAP commands inside non-synchronizing literals.  A server without support for non-synchronizing literals may interpret the &quot;+}\r\n&quot; as the end of a malformed command line and respond with a tagged BAD. In that case, the contents of the literal will be interpreted as one or more new pipelined commands, allowing a CRLF command injection attack to succeed. This affects criteria for #search and #uid_search; search_keys for #sort, #thread, #uid_sort, and #uid_thread; and attr for #fetch and #uid_fetch. This vulnerability is fixed in 0.6.5 and 0.5.15.(CVE-2026-47240)

Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, several Net::IMAP commands accept a raw string argument which is only validated to prevent CRLF injection and then sent verbatim. If this string is derived from user-controlled input, an attacker can force the next command to be absorbed as a continuation of the first command. This will cause the first command to eventually fail, but also prevents it from returning until another command is sent (from another thread). That other command will not return until the connection is closed. This vulnerability is fixed in 0.6.5 and 0.5.15.(CVE-2026-47241)

Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, when Net::IMAP#id is called with a hash argument, although the ID field value strings are correctly quoted (escaping quoted specials), they were not validated to prohibit CRLF sequences. While Net::IMAP#enable does process its arguments for aliases, it does not validate them as valid atoms (or as a list of valid atoms). The #to_s value is sent verbatim. Arguments to either command could be used by an attacker to inject arbitrary IMAP commands. This vulnerability is fixed in 0.6.5 and 0.5.15.(CVE-2026-47242)

An issue was discovered in the resolv gem before 0.7.2 for Ruby. Resolv::DNS::Resource.get_class, Resolv::DNS::Resource::Generic.create, and Resolv::DNS::SvcParam::Generic.create generate a new class for each unknown DNS resource record (type, class) pair, or each unknown SvcParamKey, encountered while decoding a response. Each generated class was permanently registered both as a constant on Resource (or SvcParam::Generic) and as an entry in a class-lookup hash (ClassHash), and thus the class remained reachable through that constant after the response was discarded. Type and class are each 16-bit values, and thus an attacker controlling DNS responses (a spoofed response, or a malicious or hijacked upstream DNS server) has roughly 2^32 distinct (type, class) pairs to choose from. A single response of a few hundred kilobytes carrying tens of thousands of distinct unknown types permanently grows process memory by tens of megabytes; repeated responses accumulate without bound and are never reclaimed by garbage collection, because the constant keeps each class alive. Any code path that calls Resolv::DNS::Message.decode on attacker-influenced DNS responses is affected. resolv is a default gem, and thus this is reachable from a plain Ruby installation without any additional dependency.(CVE-2026-80212)</Note>
		<Note Title="Topic" Type="General" Ordinal="4" xml:lang="en">An update for ruby is now available for openEuler-24.03-LTS-SP1.

openEuler Security has rated this update as having a security impact of high. A Common Vunlnerability Scoring System(CVSS)base score,which gives a detailed severity rating, is available for each vulnerability from the CVElink(s) in the References section.</Note>
		<Note Title="Severity" Type="General" Ordinal="5" xml:lang="en">High</Note>
		<Note Title="Affected Component" Type="General" Ordinal="6" xml:lang="en">ruby</Note>
	</DocumentNotes>
	<DocumentReferences>
		<Reference Type="Self">
			<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3668</URL>
		</Reference>
		<Reference Type="openEuler CVE">
			<URL>https://www.openeuler.org/en/security/cve/detail/?cveId=CVE-2026-47240</URL>
			<URL>https://www.openeuler.org/en/security/cve/detail/?cveId=CVE-2026-47241</URL>
			<URL>https://www.openeuler.org/en/security/cve/detail/?cveId=CVE-2026-47242</URL>
			<URL>https://www.openeuler.org/en/security/cve/detail/?cveId=CVE-2026-80212</URL>
		</Reference>
		<Reference Type="Other">
			<URL>https://nvd.nist.gov/vuln/detail/CVE-2026-47240</URL>
			<URL>https://nvd.nist.gov/vuln/detail/CVE-2026-47241</URL>
			<URL>https://nvd.nist.gov/vuln/detail/CVE-2026-47242</URL>
			<URL>https://nvd.nist.gov/vuln/detail/CVE-2026-80212</URL>
		</Reference>
	</DocumentReferences>
	<ProductTree xmlns="http://www.icasi.org/CVRF/schema/prod/1.1">
		<Branch Type="Product Name" Name="openEuler">
			<FullProductName ProductID="openEuler-24.03-LTS-SP1" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">openEuler-24.03-LTS-SP1</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="aarch64">
			<FullProductName ProductID="ruby-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-3.2.2-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="ruby-bundled-gems-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-bundled-gems-3.2.2-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="ruby-debuginfo-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-debuginfo-3.2.2-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="ruby-debugsource-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-debugsource-3.2.2-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="ruby-devel-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-devel-3.2.2-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bigdecimal-3.1.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bigdecimal-3.1.3-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-io-console-0.6.0-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-io-console-0.6.0-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-json-2.6.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-json-2.6.3-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-openssl-3.1.0-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-openssl-3.1.0-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-psych-5.0.1-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-psych-5.0.1-159.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rbs-2.8.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rbs-2.8.2-159.oe2403sp1.aarch64.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="src">
			<FullProductName ProductID="ruby-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-3.2.2-159.oe2403sp1.src.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="x86_64">
			<FullProductName ProductID="ruby-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-3.2.2-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="ruby-bundled-gems-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-bundled-gems-3.2.2-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="ruby-debuginfo-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-debuginfo-3.2.2-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="ruby-debugsource-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-debugsource-3.2.2-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="ruby-devel-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-devel-3.2.2-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bigdecimal-3.1.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bigdecimal-3.1.3-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-io-console-0.6.0-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-io-console-0.6.0-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-json-2.6.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-json-2.6.3-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-openssl-3.1.0-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-openssl-3.1.0-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-psych-5.0.1-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-psych-5.0.1-159.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rbs-2.8.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rbs-2.8.2-159.oe2403sp1.x86_64.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="noarch">
			<FullProductName ProductID="ruby-help-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-help-3.2.2-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="ruby-irb-3.2.2-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">ruby-irb-3.2.2-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-did_you_mean-1.6.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-did_you_mean-1.6.3-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-minitest-5.16.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-minitest-5.16.3-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rake-13.0.6-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rake-13.0.6-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rdoc-6.5.0-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rdoc-6.5.0-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rexml-3.2.5-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rexml-3.2.5-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-rss-0.2.9-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-rss-0.2.9-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-test-unit-3.5.7-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-test-unit-3.5.7-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-typeprof-0.21.3-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-typeprof-0.21.3-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygems-3.4.10-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygems-3.4.10-159.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygems-devel-3.4.10-159" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygems-devel-3.4.10-159.oe2403sp1.noarch.rpm</FullProductName>
		</Branch>
	</ProductTree>
	<Vulnerability Ordinal="1" xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1">
		<Notes>
			<Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, several Net::IMAP commands accept a &quot;raw data&quot; argument that is sent verbatim after validation to prevent command injection. However, if a server does not support non-synchronizing literals, it may still be possible to inject arbitrary IMAP commands inside non-synchronizing literals.  A server without support for non-synchronizing literals may interpret the &quot;+}\r\n&quot; as the end of a malformed command line and respond with a tagged BAD. In that case, the contents of the literal will be interpreted as one or more new pipelined commands, allowing a CRLF command injection attack to succeed. This affects criteria for #search and #uid_search; search_keys for #sort, #thread, #uid_sort, and #uid_thread; and attr for #fetch and #uid_fetch. This vulnerability is fixed in 0.6.5 and 0.5.15.</Note>
		</Notes>
		<ReleaseDate>2026-09-05</ReleaseDate>
		<CVE>CVE-2026-47240</CVE>
		<ProductStatuses>
			<Status Type="Fixed">
				<ProductID>openEuler-24.03-LTS-SP1</ProductID>
			</Status>
		</ProductStatuses>
		<Threats>
			<Threat Type="Impact">
				<Description>Medium</Description>
			</Threat>
		</Threats>
		<CVSSScoreSets>
			<ScoreSet>
				<BaseScore>5.8</BaseScore>
				<Vector>AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N</Vector>
			</ScoreSet>
		</CVSSScoreSets>
		<Remediations>
			<Remediation Type="Vendor Fix">
				<Description>ruby security update</Description>
				<DATE>2026-09-05</DATE>
				<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3668</URL>
			</Remediation>
		</Remediations>
	</Vulnerability>
	<Vulnerability Ordinal="2" xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1">
		<Notes>
			<Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, several Net::IMAP commands accept a raw string argument which is only validated to prevent CRLF injection and then sent verbatim. If this string is derived from user-controlled input, an attacker can force the next command to be absorbed as a continuation of the first command. This will cause the first command to eventually fail, but also prevents it from returning until another command is sent (from another thread). That other command will not return until the connection is closed. This vulnerability is fixed in 0.6.5 and 0.5.15.</Note>
		</Notes>
		<ReleaseDate>2026-09-05</ReleaseDate>
		<CVE>CVE-2026-47241</CVE>
		<ProductStatuses>
			<Status Type="Fixed">
				<ProductID>openEuler-24.03-LTS-SP1</ProductID>
			</Status>
		</ProductStatuses>
		<Threats>
			<Threat Type="Impact">
				<Description>Low</Description>
			</Threat>
		</Threats>
		<CVSSScoreSets>
			<ScoreSet>
				<BaseScore>2.1</BaseScore>
				<Vector>AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N</Vector>
			</ScoreSet>
		</CVSSScoreSets>
		<Remediations>
			<Remediation Type="Vendor Fix">
				<Description>ruby security update</Description>
				<DATE>2026-09-05</DATE>
				<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3668</URL>
			</Remediation>
		</Remediations>
	</Vulnerability>
	<Vulnerability Ordinal="3" xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1">
		<Notes>
			<Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to 0.6.5 and 0.5.15, when Net::IMAP#id is called with a hash argument, although the ID field value strings are correctly quoted (escaping quoted specials), they were not validated to prohibit CRLF sequences. While Net::IMAP#enable does process its arguments for aliases, it does not validate them as valid atoms (or as a list of valid atoms). The #to_s value is sent verbatim. Arguments to either command could be used by an attacker to inject arbitrary IMAP commands. This vulnerability is fixed in 0.6.5 and 0.5.15.</Note>
		</Notes>
		<ReleaseDate>2026-09-05</ReleaseDate>
		<CVE>CVE-2026-47242</CVE>
		<ProductStatuses>
			<Status Type="Fixed">
				<ProductID>openEuler-24.03-LTS-SP1</ProductID>
			</Status>
		</ProductStatuses>
		<Threats>
			<Threat Type="Impact">
				<Description>Medium</Description>
			</Threat>
		</Threats>
		<CVSSScoreSets>
			<ScoreSet>
				<BaseScore>5.8</BaseScore>
				<Vector>AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N</Vector>
			</ScoreSet>
		</CVSSScoreSets>
		<Remediations>
			<Remediation Type="Vendor Fix">
				<Description>ruby security update</Description>
				<DATE>2026-09-05</DATE>
				<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3668</URL>
			</Remediation>
		</Remediations>
	</Vulnerability>
	<Vulnerability Ordinal="4" xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1">
		<Notes>
			<Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">An issue was discovered in the resolv gem before 0.7.2 for Ruby. Resolv::DNS::Resource.get_class, Resolv::DNS::Resource::Generic.create, and Resolv::DNS::SvcParam::Generic.create generate a new class for each unknown DNS resource record (type, class) pair, or each unknown SvcParamKey, encountered while decoding a response. Each generated class was permanently registered both as a constant on Resource (or SvcParam::Generic) and as an entry in a class-lookup hash (ClassHash), and thus the class remained reachable through that constant after the response was discarded. Type and class are each 16-bit values, and thus an attacker controlling DNS responses (a spoofed response, or a malicious or hijacked upstream DNS server) has roughly 2^32 distinct (type, class) pairs to choose from. A single response of a few hundred kilobytes carrying tens of thousands of distinct unknown types permanently grows process memory by tens of megabytes; repeated responses accumulate without bound and are never reclaimed by garbage collection, because the constant keeps each class alive. Any code path that calls Resolv::DNS::Message.decode on attacker-influenced DNS responses is affected. resolv is a default gem, and thus this is reachable from a plain Ruby installation without any additional dependency.</Note>
		</Notes>
		<ReleaseDate>2026-09-05</ReleaseDate>
		<CVE>CVE-2026-80212</CVE>
		<ProductStatuses>
			<Status Type="Fixed">
				<ProductID>openEuler-24.03-LTS-SP1</ProductID>
			</Status>
		</ProductStatuses>
		<Threats>
			<Threat Type="Impact">
				<Description>High</Description>
			</Threat>
		</Threats>
		<CVSSScoreSets>
			<ScoreSet>
				<BaseScore>7.5</BaseScore>
				<Vector>AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</Vector>
			</ScoreSet>
		</CVSSScoreSets>
		<Remediations>
			<Remediation Type="Vendor Fix">
				<Description>ruby security update</Description>
				<DATE>2026-09-05</DATE>
				<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-3668</URL>
			</Remediation>
		</Remediations>
	</Vulnerability>
</cvrfdoc>