<?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 rubygem-bcrypt is now available for openEuler-24.03-LTS-SP3,openEuler-20.03-LTS-SP4,openEuler-22.03-LTS-SP4,openEuler-24.03-LTS,openEuler-24.03-LTS-SP1,openEuler-24.03-LTS-SP2</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-1723</ID>
		</Identification>
		<Status>Final</Status>
		<Version>1.0</Version>
		<RevisionHistory>
			<Revision>
				<Number>1.0</Number>
				<Date>2026-03-27</Date>
				<Description>Initial</Description>
			</Revision>
		</RevisionHistory>
		<InitialReleaseDate>2026-03-27</InitialReleaseDate>
		<CurrentReleaseDate>2026-03-27</CurrentReleaseDate>
		<Generator>
			<Engine>openEuler SA Tool V1.0</Engine>
			<Date>2026-03-27</Date>
		</Generator>
	</DocumentTracking>
	<DocumentNotes>
		<Note Title="Synopsis" Type="General" Ordinal="1" xml:lang="en">rubygem-bcrypt security update</Note>
		<Note Title="Summary" Type="General" Ordinal="2" xml:lang="en">An update for rubygem-bcrypt is now available for openEuler-24.03-LTS-SP3,openEuler-20.03-LTS-SP4,openEuler-22.03-LTS-SP4,openEuler-24.03-LTS,openEuler-24.03-LTS-SP1,openEuler-24.03-LTS-SP2</Note>
		<Note Title="Description" Type="General" Ordinal="3" xml:lang="en">bcrypt() is a sophisticated and secure hash algorithm designed by The OpenBSD project for hashing passwords. bcrypt-ruby provides a simple, humane wrapper for safely handling passwords.

Security Fix(es):

bcrypt-ruby is a Ruby binding for the OpenBSD bcrypt() password hashing algorithm. Prior to version 3.1.22, an integer overflow in the Java BCrypt implementation for JRuby can cause zero iterations in the strengthening loop.  Impacted applications must be setting the cost to 31 to see this happen. The JRuby implementation of bcrypt-ruby (`BCrypt.java`) computes the key-strengthening round count as a signed 32-bit integer. When `cost=31` (the maximum allowed by the gem), signed integer overflow causes the round count to become negative, and the strengthening loop executes **zero iterations**. This collapses bcrypt from 2^31 rounds of exponential key-strengthening to effectively constant-time computation — only the initial EksBlowfish key setup and final 64x encryption phase remain. The resulting hash looks valid (`$2a$31$...`) and verifies correctly via `checkpw`, making the weakness invisible to the application. This issue is triggered only when cost=31 is used or when verifying a `$2a$31$` hash. This problem has been fixed in version 3.1.22. As a workaround, set the cost to something less than 31.(CVE-2026-33306)</Note>
		<Note Title="Topic" Type="General" Ordinal="4" xml:lang="en">An update for rubygem-bcrypt is now available for openEuler-24.03-LTS-SP3,openEuler-20.03-LTS-SP4,openEuler-22.03-LTS-SP4,openEuler-24.03-LTS,openEuler-24.03-LTS-SP1,openEuler-24.03-LTS-SP2.

openEuler Security has rated this update as having a security impact of medium. 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">Medium</Note>
		<Note Title="Affected Component" Type="General" Ordinal="6" xml:lang="en">rubygem-bcrypt</Note>
	</DocumentNotes>
	<DocumentReferences>
		<Reference Type="Self">
			<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-1723</URL>
		</Reference>
		<Reference Type="openEuler CVE">
			<URL>https://www.openeuler.org/en/security/cve/detail/?cveId=CVE-2026-33306</URL>
		</Reference>
		<Reference Type="Other">
			<URL>https://nvd.nist.gov/vuln/detail/CVE-2026-33306</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-SP3" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">openEuler-24.03-LTS-SP3</FullProductName>
			<FullProductName ProductID="openEuler-20.03-LTS-SP4" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">openEuler-20.03-LTS-SP4</FullProductName>
			<FullProductName ProductID="openEuler-22.03-LTS-SP4" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">openEuler-22.03-LTS-SP4</FullProductName>
			<FullProductName ProductID="openEuler-24.03-LTS" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">openEuler-24.03-LTS</FullProductName>
			<FullProductName ProductID="openEuler-24.03-LTS-SP1" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">openEuler-24.03-LTS-SP1</FullProductName>
			<FullProductName ProductID="openEuler-24.03-LTS-SP2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">openEuler-24.03-LTS-SP2</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="aarch64">
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-3.1.18-2.oe2403sp3.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp3.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp3.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2003sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-debuginfo-3.1.12-2.oe2003sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-debugsource-3.1.12-2.oe2003sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2203sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-debuginfo-3.1.12-2.oe2203sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-debugsource-3.1.12-2.oe2203sp4.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-3.1.18-2.oe2403.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-debugsource-3.1.18-2.oe2403.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-3.1.18-2.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp1.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-3.1.18-2.oe2403sp2.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp2.aarch64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp2.aarch64.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="src">
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-3.1.18-2.oe2403sp3.src.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2003sp4.src.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2203sp4.src.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-3.1.18-2.oe2403.src.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-3.1.18-2.oe2403sp1.src.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-3.1.18-2.oe2403sp2.src.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="x86_64">
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-3.1.18-2.oe2403sp3.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp3.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp3.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2003sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-debuginfo-3.1.12-2.oe2003sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-debugsource-3.1.12-2.oe2003sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-3.1.12-2.oe2203sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-debuginfo-3.1.12-2.oe2203sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-debugsource-3.1.12-2.oe2203sp4.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-3.1.18-2.oe2403.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-debugsource-3.1.18-2.oe2403.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-3.1.18-2.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp1.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-3.1.18-2.oe2403sp2.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debuginfo-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-debuginfo-3.1.18-2.oe2403sp2.x86_64.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-debugsource-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-debugsource-3.1.18-2.oe2403sp2.x86_64.rpm</FullProductName>
		</Branch>
		<Branch Type="Package Arch" Name="noarch">
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP3">rubygem-bcrypt-help-3.1.18-2.oe2403sp3.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:20.03-LTS-SP4">rubygem-bcrypt-help-3.1.12-2.oe2003sp4.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.12-2" CPE="cpe:/a:openEuler:openEuler:22.03-LTS-SP4">rubygem-bcrypt-help-3.1.12-2.oe2203sp4.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS">rubygem-bcrypt-help-3.1.18-2.oe2403.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP1">rubygem-bcrypt-help-3.1.18-2.oe2403sp1.noarch.rpm</FullProductName>
			<FullProductName ProductID="rubygem-bcrypt-help-3.1.18-2" CPE="cpe:/a:openEuler:openEuler:24.03-LTS-SP2">rubygem-bcrypt-help-3.1.18-2.oe2403sp2.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">bcrypt-ruby is a Ruby binding for the OpenBSD bcrypt() password hashing algorithm. Prior to version 3.1.22, an integer overflow in the Java BCrypt implementation for JRuby can cause zero iterations in the strengthening loop.  Impacted applications must be setting the cost to 31 to see this happen. The JRuby implementation of bcrypt-ruby (`BCrypt.java`) computes the key-strengthening round count as a signed 32-bit integer. When `cost=31` (the maximum allowed by the gem), signed integer overflow causes the round count to become negative, and the strengthening loop executes **zero iterations**. This collapses bcrypt from 2^31 rounds of exponential key-strengthening to effectively constant-time computation — only the initial EksBlowfish key setup and final 64x encryption phase remain. The resulting hash looks valid (`$2a$31$...`) and verifies correctly via `checkpw`, making the weakness invisible to the application. This issue is triggered only when cost=31 is used or when verifying a `$2a$31$` hash. This problem has been fixed in version 3.1.22. As a workaround, set the cost to something less than 31.</Note>
		</Notes>
		<ReleaseDate>2026-03-27</ReleaseDate>
		<CVE>CVE-2026-33306</CVE>
		<ProductStatuses>
			<Status Type="Fixed">
				<ProductID>openEuler-24.03-LTS-SP3</ProductID>
				<ProductID>openEuler-20.03-LTS-SP4</ProductID>
				<ProductID>openEuler-22.03-LTS-SP4</ProductID>
				<ProductID>openEuler-24.03-LTS</ProductID>
				<ProductID>openEuler-24.03-LTS-SP1</ProductID>
				<ProductID>openEuler-24.03-LTS-SP2</ProductID>
			</Status>
		</ProductStatuses>
		<Threats>
			<Threat Type="Impact">
				<Description>Medium</Description>
			</Threat>
		</Threats>
		<CVSSScoreSets>
			<ScoreSet>
				<BaseScore>6.7</BaseScore>
				<Vector>AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N</Vector>
			</ScoreSet>
		</CVSSScoreSets>
		<Remediations>
			<Remediation Type="Vendor Fix">
				<Description>rubygem-bcrypt security update</Description>
				<DATE>2026-03-27</DATE>
				<URL>https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-1723</URL>
			</Remediation>
		</Remediations>
	</Vulnerability>
</cvrfdoc>