Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-2977: Possible buffer overrun vulnerability in pkcs15 `cardos_have_verifyrc_package` · Issue #2785 · OpenSC/OpenSC

A vulnerbility was found in OpenSC. This security flaw cause a buffer overrun vulnerability in pkcs15 cardos_have_verifyrc_package. The attacker can supply a smart card package with malformed ASN1 context. The cardos_have_verifyrc_package function scans the ASN1 buffer for 2 tags, where remaining length is wrongly caculated due to moved starting pointer. This leads to possible heap-based buffer oob read. In cases where ASAN is enabled while compiling this causes a crash. Further info leak or more damage is possible.

CVE
#vulnerability#git#chrome

Problem Description

On reviewing historical CVE vulnerabilities, I found a possible recurring vulnerability as CVE-2021-42782, which was reported by oss-fuzz and fixed in commit 1252aca.

The newly found issue exists in pkcs15-init module. Like the original bug in libopensc, cardos_have_verifyrc_package in pkcs15-cardos.c scans an ans1 buffer for 2 tags. The pointer p is moved after each sc_asn1_find_tag invocation, which results in the miscalculation of the length of left bytes in buffer and hence reading beyond the end of the buffer.

Proposed Resolution

Almost the same patch like 1252aca will do:

diff --git a/src/pkcs15init/pkcs15-cardos.c b/src/pkcs15init/pkcs15-cardos.c index 9715cf39…f41f73c3 100644 — a/src/pkcs15init/pkcs15-cardos.c +++ b/src/pkcs15init/pkcs15-cardos.c @@ -872,7 +872,7 @@ static int cardos_have_verifyrc_package(sc_card_t *card) sc_apdu_t apdu; u8 rbuf[SC_MAX_APDU_BUFFER_SIZE]; int r; - const u8 *p = rbuf, *q;

  •   const u8  \*p = rbuf, \*q, \*pp;
      size\_t    len, tlen = 0, ilen = 0;
    
      sc\_format\_apdu(card, &apdu, SC\_APDU\_CASE\_2\_SHORT, 0xca, 0x01, 0x88);
    

@@ -888,13 +888,13 @@ static int cardos_have_verifyrc_package(sc_card_t *card) return 0;

    while (len != 0) {

- p = sc_asn1_find_tag(card->ctx, p, len, 0xe1, &tlen); - if (p == NULL)

  •           pp = sc\_asn1\_find\_tag(card->ctx, p, len, 0xe1, &tlen);
    
  •           if (pp == NULL)
                      return 0;
              if (card->type == SC\_CARD\_TYPE\_CARDOS\_M4\_3)     {
                      /\* the verifyRC package on CardOS 4.3B use Manufacturer ID 0x01 \*/
                      /\* and Package Number 0x07                                      \*/
    

- q = sc_asn1_find_tag(card->ctx, p, tlen, 0x01, &ilen);

  •                   q = sc\_asn1\_find\_tag(card->ctx, pp, tlen, 0x01, &ilen);
                      if (q == NULL || ilen != 4)
                              return 0;
                      if (q\[0\] == 0x07)
    

@@ -902,7 +902,7 @@ static int cardos_have_verifyrc_package(sc_card_t *card) } else if (card->type == SC_CARD_TYPE_CARDOS_M4_4) { /* the verifyRC package on CardOS 4.4 use Manufacturer ID 0x03 */ /* and Package Number 0x02 */ - q = sc_asn1_find_tag(card->ctx, p, tlen, 0x03, &ilen);

  •                   q = sc\_asn1\_find\_tag(card->ctx, pp, tlen, 0x03, &ilen);
                      if (q == NULL || ilen != 4)
                              return 0;
                      if (q\[0\] == 0x02)
    

Reference

https://www.opencve.io/cve/CVE-2021-42782
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=29912

Related news

Red Hat Security Advisory 2023-7160-01

Red Hat Security Advisory 2023-7160-01 - An update for opensc is now available for Red Hat Enterprise Linux 8.

Gentoo Linux Security Advisory 202209-03

Gentoo Linux Security Advisory 202209-3 - Multiple vulnerabilities have been discovered in OpenSC, the worst of which could result in the execution of arbitrary code. Versions less than 0.22.0 are affected.

CVE-2021-42782: cardos: Correctly calculate the left bytes to avoid buffer overrun · OpenSC/OpenSC@1252aca

Stack buffer overflow issues were found in Opensc before version 0.22.0 in various places that could potentially crash programs using the library.

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907