Софтуерен бъг направил програмист богат за часове

Понякога неволна грешка в кода може да доведе до… натрупване на богатство
(снимка: CC0 Public Domain)

Програмист, случайно объркал само няколко знака в кода на вътрешния софтуер на телекомуникационен оператор, за няколко часа станал много богат – по сметката му постъпила внушителна сума. Но в крайна сметка той трябвало да върне парите под зоркия поглед на службата за сигурност и да коригира грешката в кода.

Софтуерният специалист в малък мобилен оператор прехвърлил неволно огромна сума по сметката си, като допуснал грешка в програмния код. За тази любопитна случка от началото на 21 век разказва The Register. В публикацията програмистът е наричан Трей.

100 вместо 0,01

Трей работил в малка телекомуникационна компания, чието име не се разкрива. Фирмата активно изграждала клетъчни мрежи от трето поколение (3G) и се нуждаела от специализиран вътрешен софтуер за обработка на данни – нещо като система за таксуване на базово ниво.

Трей бил част от екипа, разработил софтуера. Един ден той забелязал, че шлюзът за плащане не се държи правилно и затова написал малка програма, която да изпраща тестови транзакции към акаунта му на интервали от пет минути, докато шлюзът се възстанови. Но планирайки да зададе размера на една транзакция на $0,01, той грешно написал $100.

Преди внедряването Трей показал програмата за тестване на шлюза на своя мениджър и той я харесал толкова много, че настоял за незабавното ѝ интегриране в системата на оператора. Шефът на Трей не се притеснил от факта, че това е “домашно” написан софтуер, разработен без инструкции, нито от факта, че е само ранна нестабилна версия, за което бил предупреден от разработчика.

Три сериозни грешки

Всъщност в програмния код на Трей са допуснати три сериозни грешки, две от които той не успял да открие по време на тестването, а третата нямал време да поправи. Първата грешка била в стойността на тестовите транзакции, която трябвало да бъде цяло число, последвано от модификатор.

Идеята на Трей била, че цялото число в стойността ще бъде 1, а модификаторът ще бъде -2, което ще създаде тестова транзакция от $0,01. Но експонентата била случайно зададена на 2 вместо на -2, в резултат на което всяка транзакция струвала $100.

Втората грешка била липсата на така наречената „проверка на жизнеспособността” (liveness check). Когато един от шлюзовете за плащане падне, програмата не заспива за пет минути след всяка неуспешна транзакция, а просто веднага се опитва да обработи транзакцията отново, което води до безкраен брой транзакции.

Третата грешка, за която Трей знаел, но смятал да я коригира по-късно, била, че изборът на кредит или дебит в тестовите транзакции трябвало да бъде случаен, но по някаква причина винаги се появявал като кредит. Трей решил, че това няма да е чак толкова голям проблем, като се има предвид, че транзакциите трябвало да бъдат само $0,01 на всеки пет минути, но не взел предвид наличието на предишните две грешки.

По-добре не спорете с охраната

Когато тестовата програма вече работила в инфраструктурата на оператора, един от шлюзовете за плащане спрял да функционира. Било късно вечерта, след края на работното време. Малката помощна програма на Трей реагирала незабавно и започнала да захранва тестовата му сметка със $100 почти без прекъсване през следващите няколко часа.

Пристигайки на работа на следващата сутрин, Трей бил посрещнат от служителите по сигурността на оператора с много сериозни изражения на лицата. След като го поздравили, те попитали какви измамни схеми се опитва да завърти зад гърба на работодателя си. До този момент Трей натрупал цяло състояние в тестовата си сметка, пише The Register, без да разкрива сумата.

Неговият пряк ръководител успял да спаси Трей от цяла поредица от проблеми. Обяснил ситуацията на служителите по сигурността и описал как самият той е разрешил внедряването на нетествана програма. Не е известно какви санкции в крайна сметка са били приложени срещу Трей и неговия шеф, но тестовата сметка на програмиста била принудително изпразнена.

Коментар