Abstract: --------- The ExpressPay stored-value card system used by FedEx Kinko's is vulnerable to attack. An attacker who gains the ability to alter the data stored on the card can use FedEx Kinko's services fraudulently and anonymously, and can even obtain cash from the store. Description: ------------ The FedEx Kinko's ExpressPay system, developed by enTrac Technologies of Toronto, Ontario, is based on a Siemens / Infineon SLE4442 memory chip card. The data stored on this card is freely rewritable once a three-byte security code has been presented to the card's security logic. Neither this security code nor the data stored on the card is encrypted; anyone able to obtain the security code is free to rewrite the data stored on the card using an inexpensive commercially available smart card reader/writer. The first thirty-two bytes of the memory chip card are writable and subsequently permanently write-protectable (in this application, these bytes are write-protected), and contain a header which identifies the card as an ExpressPay stored-value card. Bytes 0x20 through 0x27 contain the value stored on the card, represented in IEEE 754 double-precision floating point format. Bytes 0x60 through 0x6A contain the card's eleven-digit serial number stored as unsigned zoned-decimal ASCII; digits 0x60 through 0x63 are the store number the card was initially issued at, and the remaining seven digits are assigned sequentially at the moment of first issue. A timestamp indicating date and time of issue are located from 0x30 through 0x37, and is repeated from 0xC7 through 0xCE. In order to write to the card, a three-byte security code must be presented in a specific sequence of commands as outlined by the SLE4442's white paper. By soldering wires to the contact points of the card and then connecting those wires to an inexpensive logic analyzer, an attacker can sniff the three-byte code as the kiosk or a card terminal prepares to write data to the card. This security code appears to be the same across all FedEx Kinko's ExpressPay cards currently in circulation. Once the three-byte code is known to the attacker, the card's stored value and serial number can be changed to any value. The ExpressPay system appears to implicitly trust the value stored on the card, regardless of what that value actually is. The system will also accept cards with obviously fake serial numbers (e.g. a non-existent store number followed by all nines). Using these altered cards, xeroxes can be made from any machine with a card reader, and computers can be rented anonymously and indefinitely. Most disturbing, however, is that since stored-value cards can be cashed out by an employee at the register at any time, an attacker could cash out altered cards obtained at little or no monetary cost. If a card is cashed out, its serial number does not appear to be invalidated in the system. If an attacker were to clone a known good card and cash it out, the clone would still be usable. Tested Vendors: --------------- - FedEx Kinko's Suspected Vendors: ------------------ - Any client of enTrac Technologies who uses the ExpressPay stored-value card system. - Any company which uses a stored-value card system based on the SLE4442 Vendor and Patch Information: ----------------------------- Proof-of-concept of the initial security vulnerability was achieved on 8 February 2006, with research into the ramifications continuing through 12 February. Copies of this report were sent to both FedEx Kinko's and enTrac Technologies on 15 February; a read receipt was returned from enTrac on 19 February, while no receipt has yet been received from FedEx Kinko's. Solution: --------- - Encrypt data before storing it on the SLE4442 card, or migrate to a system which uses cards which have built-in encryption functionality. - Verify that the stored value on the card does not significantly differ from a reference value stored in a database. - Do not allow the use of cards with invalid serial numbers. - Invalidate serial numbers of cards that are cashed out. Credits: -------- Strom Carlson, Secure Science Corporation: Hardware Security Division stromc@securescience.net