An out-of-bounds read issue was discovered in the Yubico-Piv 1.5.0 smartcard driver. The file lib/ykpiv.c contains the following code in the function _ykpiv_fetch_object()
: {% highlight c %} if(sw == SW_SUCCESS) { size_t outlen; int offs = _ykpiv_get_length(data + 1, &outlen); if(offs == 0) { return YKPIV_SIZE_ERROR; } memmove(data, data + 1 + offs, outlen); *len = outlen; return YKPIV_OK; } else { return YKPIV_GENERIC_ERROR; } {% endhighlight %} – in the end, a memmove()
occurs with a length retrieved from APDU data. This length is not checked for whether it is outside of the APDU data retrieved. Therefore the memmove()
could copy bytes behind the allocated data buffer into this buffer.
The product reads data past the end, or before the beginning, of the intended buffer.
Name | Vendor | Start Version | End Version |
---|---|---|---|
Piv_manager | Yubico | * | 1.4.2 (excluding) |
Piv_manager | Yubico | 1.4.2 (including) | 1.4.2 (including) |
Piv_manager | Yubico | 1.4.2b (including) | 1.4.2b (including) |
Piv_manager | Yubico | 1.4.2c (including) | 1.4.2c (including) |
Piv_manager | Yubico | 1.4.2d (including) | 1.4.2d (including) |
Piv_manager | Yubico | 1.4.2e (including) | 1.4.2e (including) |
Piv_manager | Yubico | 1.4.2f (including) | 1.4.2f (including) |
Piv_manager | Yubico | 1.4.2g (including) | 1.4.2g (including) |
Piv_tool | Yubico | * | 1.6.0 (excluding) |
Smart_card_minidriver | Yubico | * | 3.7.3.160 (including) |
Yubico-piv-tool | Ubuntu | bionic | * |
Yubico-piv-tool | Ubuntu | cosmic | * |
Yubico-piv-tool | Ubuntu | disco | * |
Yubico-piv-tool | Ubuntu | esm-apps/xenial | * |
Yubico-piv-tool | Ubuntu | upstream | * |
Yubico-piv-tool | Ubuntu | xenial | * |