Every CVE Search/ Get API key

CVE-2022-46149

Cap'n Proto vulnerable to out-of-bounds read due to logic error handling list-of-list.

5.4 MediumFix available

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
Low

Exploit likelihood

0.95%Up 0.1 points since Dec 1, 2022
90%50%10%1%

What each source reports

CVE List Score used 5.4

Cap'n Proto vulnerable to out-of-bounds read due to logic error handling list-of-list.

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
CVE-2022-46149
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Weakness
CWE-125
Updated
2026-11-02
EUVDEUVD-2022-7720 5.4

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
EUVD-2022-7720
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Updated
2026-11-02
GitHub AdvisoriesGHSA-qqff-4vw4-f6hx 5.4

Cap'n Proto and its Rust implementation vulnerable to out-of-bounds read due to logic error handling list-of-list

The Cap'n Proto library and capnp Rust package are vulnerable to out-of-bounds read due to logic error handling list-of-list. If a message consumer expects data of type "list of pointers", and if the consumer performs certain specific actions on such data, then a message producer can cause the consumer to read out-of-bounds memory. This could trigger a process crash in the consumer, or in some cases could allow exfiltration of private in-memory data.

Impact

  • Remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type.
  • Possible exfiltration of memory, if the victim performs additional certain actions on a list-of-pointer type.
  • To be vulnerable, an application must perform a specific sequence of actions, described below. At present, we are not aware of any vulnerable application, but we advise updating regardless.

Fixed in

Unfortunately, the bug is present in inlined code, therefore the fix will require rebuilding dependent applications.

C++ fix:

Rust fix:

  • capnp crate version 0.15.2, 0.14.11, or 0.13.7

Details

A specially-crafted pointer could escape bounds checking by exploiting inconsistent handling of pointers when a list-of-structs is downgraded to a list-of-pointers.

For an in-depth explanation of how this bug works, see David Renshaw's blog post. This details below focus only on determining whether an application is vulnerable.

In order to be vulnerable, an application must have certain properties.

First, the application must accept messages with a schema in which a field has list-of-pointer type. This includes List(Text), List(Data), List(List(T)), or List(C) where C is an interface type. In the following discussion, we will assume this field is named foo.

Second, the application must accept a message of this schema from a malicious source, where the attacker can maliciously encode the pointer representing the field foo.

Third, the application must call getFoo() to obtain a List<T>::Reader for the field, and then use it in one of the following two ways:

  1. Pass it as the parameter to another message's setFoo(), thus copying the field into a new message. Note that copying the parent struct as a whole will not trigger the bug; the bug only occurs if the specific field foo is get/set on its own.

  2. Convert it into AnyList::Reader, and then attempt to access it through that. This is much less likely; very few apps use the AnyList API.

The dynamic API equivalents of these actions (capnp/dynamic.h) are also affected.

If the application does these steps, the attacker may be able to cause the Cap'n Proto implementation to read beyond the end of the message. This could induce a segmentation fault. Or, worse, data that happened to be in memory immediately after the message might be returned as if it were part of the message. In the latter case, if the application then forwards that data back to the attacker or sends it…

Record
GHSA-qqff-4vw4-f6hx
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Weakness
CWE-125
Updated
2026-11-02
NVD 5.4

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
CVE-2022-46149
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L
Weakness
CWE-125
Updated
2026-11-02
OSV 5.4

Cap'n Proto vulnerable to out-of-bounds read due to logic error handling list-of-list.

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
CVE-2022-46149
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Weakness
CWE-125
Updated
2026-11-02
OSVDEBIAN-CVE-2022-46149 5.4

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
DEBIAN-CVE-2022-46149
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L
Updated
2026-11-03
Show 9 moreShow less
OSVGHSA-qqff-4vw4-f6hx 5.4

Cap'n Proto and its Rust implementation vulnerable to out-of-bounds read due to logic error handling list-of-list

The Cap'n Proto library and capnp Rust package are vulnerable to out-of-bounds read due to logic error handling list-of-list. If a message consumer expects data of type "list of pointers", and if the consumer performs certain specific actions on such data, then a message producer can cause the consumer to read out-of-bounds memory. This could trigger a process crash in the consumer, or in some cases could allow exfiltration of private in-memory data.

Impact

  • Remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type.
  • Possible exfiltration of memory, if the victim performs additional certain actions on a list-of-pointer type.
  • To be vulnerable, an application must perform a specific sequence of actions, described below. At present, we are not aware of any vulnerable application, but we advise updating regardless.

Fixed in

Unfortunately, the bug is present in inlined code, therefore the fix will require rebuilding dependent applications.

C++ fix:

Rust fix:

  • capnp crate version 0.15.2, 0.14.11, or 0.13.7

Details

A specially-crafted pointer could escape bounds checking by exploiting inconsistent handling of pointers when a list-of-structs is downgraded to a list-of-pointers.

For an in-depth explanation of how this bug works, see David Renshaw's blog post. This details below focus only on determining whether an application is vulnerable.

In order to be vulnerable, an application must have certain properties.

First, the application must accept messages with a schema in which a field has list-of-pointer type. This includes List(Text), List(Data), List(List(T)), or List(C) where C is an interface type. In the following discussion, we will assume this field is named foo.

Second, the application must accept a message of this schema from a malicious source, where the attacker can maliciously encode the pointer representing the field foo.

Third, the application must call getFoo() to obtain a List<T>::Reader for the field, and then use it in one of the following two ways:

  1. Pass it as the parameter to another message's setFoo(), thus copying the field into a new message. Note that copying the parent struct as a whole will not trigger the bug; the bug only occurs if the specific field foo is get/set on its own.

  2. Convert it into AnyList::Reader, and then attempt to access it through that. This is much less likely; very few apps use the AnyList API.

The dynamic API equivalents of these actions (capnp/dynamic.h) are also affected.

If the application does these steps, the attacker may be able to cause the Cap'n Proto implementation to read beyond the end of the message. This could induce a segmentation fault. Or, worse, data that happened to be in memory immediately after the message might be returned as if it were part of the message. In the latter case, if the application then forwards that data back to the attacker or sends it…

Record
GHSA-qqff-4vw4-f6hx
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
Weakness
CWE-125
Updated
2026-11-02
OSVJLSEC-2026-1268 5.4

Cap'n Proto and its Rust implementation vulnerable to out-of-bounds read due to logic error handling list-of-list

The Cap'n Proto library and capnp Rust package are vulnerable to out-of-bounds read due to logic error handling list-of-list. If a message consumer expects data of type "list of pointers", and if the consumer performs certain specific actions on such data, then a message producer can cause the consumer to read out-of-bounds memory. This could trigger a process crash in the consumer, or in some cases could allow exfiltration of private in-memory data.

Impact

  • Remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type.
  • Possible exfiltration of memory, if the victim performs additional certain actions on a list-of-pointer type.
  • To be vulnerable, an application must perform a specific sequence of actions, described below. At present, we are not aware of any vulnerable application, but we advise updating regardless.

Fixed in

Unfortunately, the bug is present in inlined code, therefore the fix will require rebuilding dependent applications.

C++ fix:

Rust fix:

  • capnp crate version 0.15.2, 0.14.11, or 0.13.7

Details

A specially-crafted pointer could escape bounds checking by exploiting inconsistent handling of pointers when a list-of-structs is downgraded to a list-of-pointers.

For an in-depth explanation of how this bug works, see David Renshaw's blog post. This details below focus only on determining whether an application is vulnerable.

In order to be vulnerable, an application must have certain properties.

First, the application must accept messages with a schema in which a field has list-of-pointer type. This includes List(Text), List(Data), List(List(T)), or List(C) where C is an interface type. In the following discussion, we will assume this field is named foo.

Second, the application must accept a message of this schema from a malicious source, where the attacker can maliciously encode the pointer representing the field foo.

Third, the application must call getFoo() to obtain a List<T>::Reader for the field, and then use it in one of the following two ways:

  1. Pass it as the parameter to another message's setFoo(), thus copying the field into a new message. Note that copying the parent struct as a whole will not trigger the bug; the bug only occurs if the specific field foo is get/set on its own.

  2. Convert it into AnyList::Reader, and then attempt to access it through that. This is much less likely; very few apps use the AnyList API.

The dynamic API equivalents of these actions (capnp/dynamic.h) are also affected.

If the application does these steps, the attacker may be able to cause the Cap'n Proto implementation to read beyond the end of the message. This could induce a segmentation fault. Or, worse, data that happened to be in memory immediately after the message might be returned as if it were part of the message. In the latter case, if the…

Record
JLSEC-2026-1268
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L
Updated
2026-11-02
OSVRHSA-2023:1408 5.4

Red Hat Security Advisory: OpenShift Container Platform 4.12.9 packages and security update

Record
RHSA-2023:1408
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L
Updated
2026-11-02
OSVUBUNTU-CVE-2022-46149 5.4

Cap'n Proto is a data interchange format and remote procedure call (RPC) system. Cap'n Proro prior to versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3, as well as versions of Cap'n Proto's Rust implementation prior to 0.13.7, 0.14.11, and 0.15.2 are vulnerable to out-of-bounds read due to logic error handling list-of-list. This issue may lead someone to remotely segfault a peer by sending it a malicious message, if the victim performs certain actions on a list-of-pointer type. Exfiltration of memory is possible if the victim performs additional certain actions on a list-of-pointer type. To be vulnerable, an application must perform a specific sequence of actions, described in the GitHub Security Advisory. The bug is present in inlined code, therefore the fix will require rebuilding dependent applications. Cap'n Proto has C++ fixes available in versions 0.7.1, 0.8.1, 0.9.2, and 0.10.3. The capnp Rust crate has fixes available in versions 0.13.7, 0.14.11, and 0.15.2.

Record
UBUNTU-CVE-2022-46149
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:L
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L
Updated
2026-11-02
OSVopenSUSE-SU-2024:12543-1 No score

capnproto-0.10.3-1.1 on GA media

These are all security issues fixed in the capnproto-0.10.3-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2024:12543-1
Updated
2026-11-02
OSVopenSUSE-SU-2024:12557-1 No score

python310-pycapnp-1.2.2-1.1 on GA media

These are all security issues fixed in the python310-pycapnp-1.2.2-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2024:12557-1
Updated
2026-11-02
OSVopenSUSE-SU-2025:15102-1 No score

python311-pycapnp-2.0.0-2.5 on GA media

These are all security issues fixed in the python311-pycapnp-2.0.0-2.5 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2025:15102-1
Updated
2026-11-02
OSVRUSTSEC-2022-0068 No score

out-of-bounds read possible when setting list-of-pointers

If a message consumer expects data of type "list of pointers", and if the consumer performs certain specific actions on such data, then a message producer can cause the consumer to read out-of-bounds memory. This could trigger a process crash in the consumer, or in some cases could allow exfiltration of private in-memory data.

The C++ Cap'n Proto library is also affected by this bug. See the advisory on the main Cap'n Proto repo for a succinct description of the exact circumstances in which the problem can arise.

Record
RUSTSEC-2022-0068
Updated
2026-11-02
OSVSUSE-SU-2022:4478-1 No score

Security update for capnproto

This update for capnproto fixes the following issues:

  • CVE-2022-46149: Fixed out of bounds read when handling a list of lists (bsc#1205968).
Record
SUSE-SU-2022:4478-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
capnp
crates.io
0.15.0 up to 0.15.2
0.15.2
capnp
crates.io
0.14.0 up to 0.14.11
0.14.11
capnp
crates.io
before 0.13.7
0.13.7
capnproto
Debian:12
before 0.9.2-2
0.9.2-2
capnproto
Debian:13
before 0.9.2-2
0.9.2-2
capnproto
Debian:14
before 0.9.2-2
0.9.2-2
rust-capnp
Debian:12
before 0.14.11-1.1
0.14.11-1.1
rust-capnp
Debian:13
before 0.14.11-1.1
0.14.11-1.1
rust-capnp
Debian:14
before 0.14.11-1.1
0.14.11-1.1
capnproto_jll
Julia
All versions None known
Show 12 moreShow less
Affected packages
PackageAffectedFixed
conmon-rs
Red Hat:openshift:4.12::el8
before 0:0.5.1-3.rhaos4.12.git.el8
0:0.5.1-3.rhaos4.12.git.el8
conmon-rs
Red Hat:openshift:4.12::el9
before 0:0.5.1-3.rhaos4.12.git.el9
0:0.5.1-3.rhaos4.12.git.el9
capnp
crates.io
0.0.0-0 up to 0.13.7, 0.14.0-0 up to 0.14.11, 0.15.0-0 up to 0.15.2
0.13.70.14.110.15.2
capnproto
SUSE:Linux Enterprise Module for Desktop Applications 15 SP4
before 0.9.1-150400.3.4.1
0.9.1-150400.3.4.1
capnproto
openSUSE:Leap 15.4
before 0.9.1-150400.3.4.1
0.9.1-150400.3.4.1
capnproto
Ubuntu:14.04:LTS
All versions, plus listed versions
0.2.1-10.4.0~git20131030+e7d2778-0ubuntu10.4.0-1ubuntu10.4.0-1ubuntu20.4.0-1ubuntu2.1
None known
capnproto
Ubuntu:16.04:LTS
All versions, plus listed versions
0.4.0-1ubuntu30.5.3-2ubuntu10.5.3-2ubuntu1.1
None known
interchange
Ubuntu:16.04:LTS
All versions, plus listed versions
5.7.7-2
None known
capnproto
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
0.5.3-2ubuntu20.6.1-10.6.1-1ubuntu10.6.1-1ubuntu1+esm1
None known
capnproto
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
0.7.0-50.7.0-5build10.7.0-60.7.0-6ubuntu0.1~esm1
None known
capnproto
Ubuntu:22.04:LTS
All versions, plus listed versions
0.7.0-7build10.8.0-2ubuntu2
None known
python-pycapnp
openSUSE:Tumbleweed
before 2.0.0-2.5
2.0.0-2.5

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2022-46149 is a medium vulnerability (CVSS 5.4) in Capnproto Capnp, published November 30, 2022. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.95%, the 61st percentile. Fixed in capnp 0.15.2.

References

Show 26 moreShow less
This page doesn't list everything

Left out here: the rest of 3 source descriptions. The JSON record has them.

MoveEnter Open