Zkoumal jsem dokumentaci a experimentálně porovnání, ale nesháněl jsem archaický Python.
Primární problém je ve funkci input, která udělá eval, a z názvu to není moc patrné. S heslem, kde by to failovalo na většině nenumerických vstupů, je to dost umělý příklad. Reálné by bylo čtení čísla z konzole, kde se na vstupu objeví data útočníka. Pak útočník může vykonat libovolný kód.
Z druhé strany v kontextu webového serveru si těžko představit použití funkce input. Ta čte z konzole, ne z HTTP požadavku. Musel by server (napsaný v čemkoliv) volat konzolovou aplikaci a předávat jí data.
Druhá věc je typová koerce (porovnává to int a str), ale v Pythonu 2.7.18 jsem to nereprodukoval (4 se nerovná "4"). Možná to tak ale v archaické verzi Pythonu fungovalo. Ale když jsme u toho PHP:
https://github.com/spaze/hashesDeserializace – pokud nemám nějak rozumně omezené, co z deserializace může vypadnout, je to obecně minové pole.
Injection je IMHO primárně věc programátora, případně nějaké rozumné knihovny, která poskytne jednoduché řešení.