Article 2FY3W CodeSOD: The Tokens That Wouldn’t Die

CodeSOD: The Tokens That Wouldn’t Die

by
Ellis Morning
from The Daily WTF on (#2FY3W)

Expiration.jpg

Sacha received custody of a legacy Python API, and was tasked with implementing a fresh version of it.

He focused on authentication first. The existing API used JSON web tokens that, for some reason, never expired. Assignments like expiration=86400 and expiration=3600 were littered throughout the code, but seemed to go ignored.

It didn't take long to track down the token generating code and figure out the tokens' source of (near) immortality:

expInTS = calendar.timegm(datetime_tz.now().timetuple())expiration_seconds = 86400expiration = (datetime_tz.now() + datetime.timedelta(seconds=expiration_seconds))return {'status': True, "auth_token": user.generate_auth_token(expiration=expInTS), 'code': code, "token_expiration": expiration.strftime('%Y-%m-%dT%H:%M:%S'), 'user': user.to_json()}, 200

Several expiration-related variables are set up at first, and even the original coder seemed to have gotten confused by them. When generating the token, he or she used expInTS for the expiration value instead of expiration. The problem is that expInTS is set to the current Unix timestamp-which is the number of seconds that have transpired since January 1, 1970.

The slip was confirmed when Sacha looked at a token header:

{ alg: "HS256", exp: 2977106874, iat: 1488553437}

iat (issued at) shows the Unix timestamp when the token was created. The timestamp was then added to itself, resulting in the timestamp for expiration shown in exp. That timestamp corresponds to May 4, 2064, a date by which most of us will be dead or retired.

Profound, yes, but not exactly desirable. Sacha adjusted the expiration value to 86400 seconds (1 day), then moved along.

release50.png[Advertisement] Release!is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped! TheDailyWtf?d=yIl2AUoC8zA3HMXJZuRAS0
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments