Commit Graph
8 Commits
Author SHA1 Message Date
Mounir IDRASSI 204d663952 Security tokens: bound response chaining and EMV directory reads
ApduProcessData sent GET RESPONSE for as long as the card answered
0x61XX, allowing an endless loop and unbounded response growth. Limit
each chain to 256 follow-up commands and erase the partial response
if the limit is exceeded.

PSE directory enumeration had a separate unbounded loop with an
eight-bit record counter. Read only records 1 through 254, stop on an
empty or unsuccessful response, and limit the accumulated directory
data to 254 short records before parsing. Malformed TLV responses
consume this budget too, so they cannot bypass either limit.
2026-10-15 07:57:12 +02:00
Mounir IDRASSIandMounir IDRASSI c42fb18d59 Security tokens: wipe APDU buffers throughout their lifetime
EMV keyfile cleanup did not cover APDU response storage, temporary
copies, or transport buffers on exceptions. Wipe responses on clear,
replacement, destruction and growth, avoid redundant response and PAN
copies, and install transport cleanup guards before use.

Add standalone checks for erasure before release, aliasing, allocation
failures, exception unwinding and const TLV input.
2026-10-15 00:09:13 +09:00
Mounir IDRASSI 62253154cb Wipe token keyfile buffers on failure and release
Use a size_t counter in burn so large erasures retain their full length.
Install cleanup guards before token verification and keyfile application,
including the Windows token export path.

Reserve the complete EMV keyfile output before copying its components,
and wipe temporary components on every exit. Erase cached card data before
clearing or replacing it, including when copying a card fails.

Validation: Linux console and GUI builds with algorithm tests; cleanup
checks with GCC and Clang UBSan. PR 1816 still applies cleanly.
2026-10-11 23:10:55 +09:00
Mounir IDRASSI 455a4f2176 Avoid conflict with C++17 features std::byte by using uint8 type instead of byte 2024-06-12 12:30:04 +02:00
847abb23f0 Fix warnings and throwing an exception instead of ignoring the error (#1229)
* EMVCard.cpp: ArrayToHexWideString: prohibit conversion of a string constant

../Common/EMVCard.cpp: In function 'std::wstring VeraCrypt::ArrayToHexWideString(con
st unsigned char*, size_t)':
../Common/EMVCard.cpp:28:43: warning: ISO C++ forbids converting a string constant
to 'wchar_t*' [-Wwrite-strings]
   28 |                 static wchar_t* hexChar = L"0123456789ABCDEF";
      |                                           ^~~~~~~~~~~~~~~~~~~

Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>

* EMVCard.cpp: ArrayToHexWideString: fix of the comparison of different types

../Common/EMVCard.cpp: In function 'std::wstring VeraCrypt::ArrayToHexWideString(con
st unsigned char*, size_t)':
../Common/EMVCard.cpp:32:43: warning: comparison of integer expressions of different
 signedness: 'int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare]
   32 |                         for (int i = 0; i < cbData; i++)
      |                                         ~~^~~~~~~~

Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>

* SecurityTokenKeyfilesDialog.cpp: removed initialization of an unused variable

Forms/SecurityTokenKeyfilesDialog.cpp:58:24: warning: unused variable 'i' [-Wunused-
variable]
   58 |                 size_t i = 0;
      |                        ^

Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>

* Core/Unix: throwing an exception instead of ignoring the error

Fixes: 5a6b445f ("fix warnings and UB (#1164)")
Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>

---------

Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
Co-authored-by: Vasiliy Kovalev <kovalev@altlinux.org>
2023-10-08 15:36:15 +02:00
Mounir IDRASSI 19fa1f8684 Linux: use "-std=c++11" for gcc 4.8 and adapt code to old compilers 2023-10-01 11:06:46 +02:00
Mounir IDRASSI d2caa77207 Fix compiler type-cast warnings 2023-07-02 15:25:21 +02:00
Mounir IDRASSI 034b64f415 EMV keyfile support: Overall code improvements and bug fixes 2023-06-29 00:06:20 +02:00