Стелс-патч №3 от КиберДеда. Как Т-Банк сломался об 2 рубля, или Сказ о том, как пчеловод из Давлеканово многотысячную толпу синьоров на печи переиграл

Здравствуйте, Станислав Близнюк и вся ваша многотысячная толпа дипломированных ИТ-специалистов, аналитиков, синьоров и прочих обитателей модных коворкингов, которые регулярно поют в уши акционерам про «космические технологии» и безупречный искусственный интеллект!

На связи снова КиберДед — Игорь Чернов, пчеловод из Давлеканово.

Я тут давеча лежу на теплой башкирской печи, сверчки запели — я ими легонько дирижирую, как оркестром. Хорошо, спокойно. И тут заходит бабка. Посмотрела на меня ласково и говорит: "Ну что, бабусин системный аналитик, длину огуречной грядки ты мне вчера спроектировал, количество снесенных курских яиц в базу данных занес. А слабо тебе теперь посчитать, сколько строк кода в Т-Банке у этих городских синьоров написано?"

А почему бы и нет? Слез я с печи, сел за стол. С одной стороны устроился толстый кот — сидит со мной, в монитор щурится, строчки лапой считает. С другой стороны на полу пристроилась собака. И вот, понимаете, сидим мы, считаем. Стоит мне в системной логике хоть на один символ ошибиться — собака уши прижимает и начинает так тихонько, жалобно подвывать. Пересчитываю заново, исправляю — замолкает, хвостом виляет.

Она — обычная дворняга, а логику граничных значений понимает! Чувствует, где в алгоритме фальшивая нота проскочила. А вот ваша многотысячная толпа программистов выть не будет. Знаете почему? Они просто искренне не поймут, где накосячили. У них в глазах только KPI, смузи и квартальные презентации, а простого житейского здравого смысла — меньше, чем у моего пса.

И пока вы там пилите бюджеты на рекламу и пихаете свой ИИ в каждый чайник, ваша хваленая многомиллиардная финтех-платформа продолжает оставаться унылым карточным домиком. С моей печи мне прекрасно видно, как вся эта ваша ИТ-бюрократия смачно садится в лужу перед дедом-пчеловодом. Я, не вставая с лежанки, закинул в ваше финансовое ядро всего 2 рублей — и у него случился легкий паралич.Абсурд на грани маразма: 10 рублей можно, а 2 рубля — харам!

Стелс-патч №3 от КиберДеда. Как Т-Банк сломался об 2 рубля, или Сказ о том, как пчеловод из Давлеканово многотысячную толпу синьоров на печи переиграл

Лежу я, дирижирую сверчками, и как системный аналитик решаю протестировать ваши системы на граничные значения — туда, куда ваши городские разработчики смущаются ковырять. Инициировал перевод на сумму 2.00 RUB. И тут ваше продвинутое платежное ядро заклинило. Оно выдало системный сбой на бэкенде, зациклилось в бесконечной формуле округления и намертво зависло. Сверчки замолчали от удивления, кот усы прижал, а собака ка-а-ак завыла на всю избу! Прибежала бабка впопыхах, думала — корова от такого воя рожает. Ан нет, ложная тревога: это ваш бэкенд в муках выдавливал из себя ответ на двухрублевый запрос

Знаете, что сделала ваша многотысячная толпа поддержки, чтобы прикрыть задницы своих уставших программистов? Они выкатили мне в чат официальный архитектурный костыль (цитирую этот бред дословно):

«При необходимости, сейчас вы можете совершить перевод, указав сумму более 10 рублей. При необходимости перечисления суммы в 2 RUB, вы можете воспользоваться переводом по реквизитам счета».

Вы только вдумайтесь в этот уровень цифрового юмора! То есть 10 рублей ваша система перевести может, а 2 рубля — ни в коем случае нельзя! В их головы даже не пришла мысль: если операция экономически невыгодна банку из-за стоимости проведения сессии, ну возьмите вы комиссию! Спишите с меня 2 рубля + тариф, заработайте на этом, но проведите транзакцию по правилам здоровой архитектуры, по правилам здравого смысла!

Но нет!

Ваш программист просто поставил жесткий запрет на фронтенде и заблокировал кнопку. Для этой системы проще полностью отказать клиенту, чем заставить код нормально работать с цифрами ниже десяти. Собака в этот момент выла уже в полный голос, оплакивая утерянную логику отечественного финтеха.

Дыра размером с Элеватор: обходим Госуслуги через реквизиты

НоООООООооо.....Тпру... Чуть с телеги не упал...Пока писал вам....

Но самый сок и позор вашей многотысячной толпы разработчиков прячется во второй части их ответа. Они пишут: «переводите 2 рубля по реквизитам счета».

Сверчки на печи снова начинают тихонько подыгрывать, пока я включаю системный анализ: на основном шлюзе (через СБП) у них стоит жесткое требование — полная верификация кошелька через Госуслуги (ЕСИА). Без этого — блок. Но если пользователь меняет эндпоинт и отправляет те же самые 2 рубля по реквизитам — ваша система напрочь забывает проверить статус верификации Госуслуг!

Вы понимаете, какую логическую дыру вы сами создали?

Но это же предел гениальности! Киса Воробьянинов от зависти подавился бы компотом...

Вы открыли черный ход для фрод-схем и автоматизированного прогрева распределенных «серых» кошельков в обход государственных проверок.Вы не починили шлюз, вы просто замазали косяк костылем на коленке и надеетесь, что КиберДед с печи этого не заметит. Кот в этот момент просто лапой умылся, и культурно сплюнул за печь — даже животному неловко за ваши микросервисы.

Штраф в миллиарды, но код не пропустит!

Это один в один напоминает историю с Мо"""ьбанком( заштриховываю, потому что статья не о нем, нечего рекламировать)), который после моих тестов лежал пластом 5 дней, пока мой персональный глушитель рекламы не вырезал их зависшие запросы к американским серверам аналитики. У вас в Т-Банке сидит точно такая же многотысячная толпа, которая слепо верит скриптам, падая ниц перед сервером с ударом лба об пол, и пытается задобрить зависший процессор чтением вслух должностных инструкций и регулярным протиранием монитора шелковой тряпочкой

Представьте весёлую ситуацию: Центробанк вводит против Т-Банка жесткий штраф в размере 1% от общей стоимости всего вашего гигантского банка за сбои в платежной системе и нарушение требований регулятора. Это же несколько миллиардов рублей чистых убытков на ровном месте!

Любое руководство в ужасе побежало бы увольнять и вешать виновных. Но нет! Даже под угрозой штрафа в миллиарды один упрямый код Т-Банка будет сидеть, упершись рогами в экран, и ни за что не пропустит несчастные 2 рубля через шлюз, потому что его так натаскали на тестах! Свежих мыслей нету. Да откуда же они появятся, если посредственность туго обволокла все структуры банка...И вся ваша ИТ-команда будет молча смотреть на падающие сервера, пока моя собака в Давлеканово будет выть от очевидности решения.Бесплатный мастер-класс для Т-Банка с башкирской печи:

Раз ваша многотысячная толпа синьоров не способна спроектировать простейший платежный модуль, я, дирижируя сверчками и поглаживая кота, пишу вам готовый патч. Внедряйте, пока я окончательно не раскатал ваши шлюзы:

  1. Сквозная валидация: Выкиньте костыли с фронтенда. Проверка флага Госуслуг должна быть серверной (API Gateway) и сквозной для всех типов переводов — и для СБП, и для реквизиты.
  2. Динамический биллинг: Хватит позориться с запретами «от 10 рублей». Настройте расчет динамической комиссии для микро-сумм: Итоговое списание = X + Fee.
  3. Асинхронность и таймауты: Вырежьте к черту все внешние импортные зависимости, из-за которых ваши базы данных уходят в бесконечный цикл ожидания (Timeout) и вешают сессии.

Учите матчасть, Станислав, и займите уже эту вашу многотысячную толпу реальным делом. В следующий раз я пришлю вам на тест не 2 рубля, а 2 копейки — и боюсь, ваше финансовое ядро после этого придется собирать по частям, пока я буду дальше спокойно лежать на печи, а бабка будет считать яйца в исправной и надежной базе данных.

ПОСЛЕСЛОВИЕ. Привет триажу BI.ZONE и калькулятору CVSS

Пока многотысячная толпа поддержки Т-Банка в чате заваривала смузи и сочиняла костыли про «переводы от 10 рублей», КиберДед зря времени не терял. Посмотрел я на этот цифровой цирк, погладил кота, вздохнул вместе с собакой и пошел оформлять вашей архитектурной лаже официальный протокол.

Для тех синьоров Т-Банка, кто до сих пор уверен, что «2 рубля — это не баг, а фича», сообщаю: отчет о вашей дыре в бизнес-логике (обход верификации Госуслуг через альтернативный эндпоинт реквизитов) успешно зарегистрирован на официальной платформе BI.ZONE Bug Bounty под моим ником ssmel.

Стелс-патч №3 от КиберДеда. Как Т-Банк сломался об 2 рубля, или Сказ о том, как пчеловод из Давлеканово многотысячную толпу синьоров на печи переиграл

И знаете, что выдал беспристрастный автоматический калькулятор критичности уязвимостей (CVSS v3.0), когда я вбил туда параметры вашего шлюза? Он выдал сочные 8.3 балла из 10. Статус: HIGH (Высокий уровень опасности).Это вам не отзывы в App Store читать. Вопрос ушел на независимый технический триаж. По правилам платформы, ваши безопасники теперь обязаны эту дыру признать, изолировать и выкатить мне заслуженную выплату за готовое ТЗ по исправлению вашей системы. Так что бегите к серверам, закрывайте черный ход, пока через ваши «реквизиты по 2 рубля» серые кошельки массово греться не начали.

А я пока пойду прилягу обратно на печь. Сверчки, музыку! Тпру-у-у. Не, помогу ка беспомощным, ничего не понимающим в печном программировании, а то от испуга перед начальством че нибудь не сделали с собой ....

ТЕХНИЧЕСКИЙ ПАТЧ ДЛЯ СИНЬОРОВ Т-БАНКА (PL/SQL / ORACLE)Для ликвидации логической дыры обхода ЕСИА и зацикливания шлюза на граничных значениях, ваш упрямый серверный код должен выглядеть вот так. Скопируйте, протестируйте, адаптируйте и катите в релиз, а мне выписывайте заслуженный кэш на BI.ZONE

CREATE OR REPLACE PACKAGE BODY pkg_fintech_gate_validator AS

PROCEDURE validate_and_process_payment (

p_user_id IN NUMBER, p_amount IN NUMBER, p_endpoint_type IN VARCHAR2, p_account_to IN VARCHAR2, p_status_code OUT VARCHAR2, p_applied_fee OUT NUMBER

) IS

v_esia_verified NUMBER; v_min_limit CONSTANT NUMBER := 10.00; v_fixed_fee CONSTANT NUMBER := 10.00; v_final_debit NUMBER;

e_unverified_user EXCEPTION; PRAGMA EXCEPTION_INIT(e_unverified_user, -20001);

BEGIN

SELECT is_esia_verified INTO v_esia_verified FROM user_profiles WHERE user_id = p_user_id;

IF p_amount <= v_min_limit AND v_esia_verified = 0 THEN

RAISE_APPLICATION_ERROR(-20001, 'Ошибка бизнес-логики: Операция заблокирована. Требуется полная верификация через ЕСИА.');

END IF;

IF p_amount < v_min_limit THEN

p_applied_fee := v_fixed_fee; v_final_debit := p_amount + v_fixed_fee;

ELSE

p_applied_fee := 0; v_final_debit := p_amount;

END IF;

INSERT INTO transaction_ledger (transaction_id, user_id, amount, fee, final_debit, endpoint, target_account, status, created_at

) VALUES (seq_tx_id.NEXTVAL, p_user_id, p_amount, p_applied_fee, v_final_debit, p_endpoint_type, p_account_to, 'SUCCESS', SYSDATE);

p_status_code := 'TX_PROCESSED_SUCCESSFULLY';

EXCEPTION

WHEN NO_DATA_FOUND THEN p_status_code := 'ERR_USER_NOT_FOUND';

WHEN e_unverified_user THEN p_status_code := 'ERR_SECURITY_BLOCK_ESIA';

WHEN OTHERS THEN

ROLLBACK; log_system_error(SQLCODE, SQLERRM, 'pkg_fintech_gate_validator.validate_and_process_payment');

p_status_code := 'ERR_INTERNAL_GATEWAY_TIMEOUT';

END validate_and_process_payment;

END pkg_fintech_gate_validator;

/

ВАЖНОЕ ПРИМЕЧАНИЕ ДЛЯ СИНЬОРОВ: Почему я написал «АДАПТИРУЙТЕ»?

Специально для многотысячной толпы разработчиков Т-Банка, которые уже потянулись копировать мой чистый софт: предупреждаю, если вы попытаетесь вслепую, бездумно залить этот патч в свой бэкенд — ваша система мгновенно встанет колом. И сломают её ваши собственные костыли, которые вы туда годами забивали.

Я думаю, что костыли, которые они назабивали, сломают без адаптации и этот код. Мой патч написан по законам здоровой архитектуры. Но в вашей заиленной базе данных правильные таблицы вроде user_profiles или флаги is_esia_verified наверняка обозваны какими-нибудь кривыми системными индексами ради экономии места. Без ручной перепривязки переменных под ваш внутренний бардак система выдаст ошибку компиляции.

Но главное — столкновение триггеров. В вашем ядре уже нагорожена куча фронтенд-заплаток, которые судорожно пытаются не пущать несчастные 2 рубля через шлюз СБП. Если вы запустите мой сквозной серверный валидатор, не вычистив предварительно этот старый мусор, ваши старые костыли столкнутся с новой чистой логикой лоб в лоб. База данных начнет бесконечно перекидывать транзакцию по кругу, начнется конфликт блокировок, и шлюз опять упадет в глубокий каскадный аут.

Я дал вам идеальный математический скелет. Но чтобы он ожил, вам придется включить мозги, выгрести из ядра весь ваш костыльный сор и руками адаптировать патч под свои сервера. Работайте, братья! А я пока пойду прилягу обратно на печь. Буду слушать через стереонаушники сверчковую музыку

Ну а если уж совсем не сможете, если у вашей многотысячной толпы синьоров окончательно заклинит мозги перед моим кодом — берите банку скипидара от радикулита и приезжайте ко мне на пасеку в Давлеканово. Натрете стареющему системному аналитику пятки, чтобы радикулит не донимал, а я так уж и быть — слезу с печи, вправлю вам архитектуру и помогу бедолагам.