Framework Bottle pro Python

tecka

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Framework Bottle pro Python
« Odpověď #15 kdy: 12. 04. 2025, 09:26:47 »
K tomu == by se našlo CVEčko?
Nenašlo, protože v tom žádný problém nebyl.


Re:Framework Bottle pro Python
« Odpověď #16 kdy: 12. 04. 2025, 09:58:03 »
Tak v případě Javy sice ten seznam V
v Javě bude asi poněkud delší, ale:

1. Velká část z nich tvořila problémy se sandboxingem, což se typicky týká Java appletů. Mrtvá věc. Jiné jazyky to často řeší, že se o sandboxing ani nesnaží.
2. Standardní knihovna toho má fakt hodně, včetně vlastní implementace různých kryptografických věcí. A pak jestli používám Python a mám bug v OpenSSL, nebo Javu a mám bug v Javě, vyjde vlastně nastejno, ale z hlediska statistiky CVE je v tom rozdíl.

CPU

  • *****
  • 1 052
    • Zobrazit profil
    • E-mail
Re:Framework Bottle pro Python
« Odpověď #17 kdy: 12. 04. 2025, 18:13:41 »
Nenašlo, protože v tom žádný problém nebyl.

Jo, žij si dál ve své zemi šťastných skřítků.
Ale pokud máš dostatečně zajímavou sumičku, můžeme se domluvit na bezpečnostním školení pro python 2.x

Pro ostatní: Python 2.x byl z bezpečnostního pohledu plný pastí.


Re:Framework Bottle pro Python
« Odpověď #18 kdy: 13. 04. 2025, 13:06:11 »
Python 2 moc neznám, zkusil jsem udělat rychlý průzkum: https://chatgpt.com/share/67fb9819-330c-800e-8462-160ce03b251a (Samozřejmě berte s rezervou a případně ověřujte, ale vypadá to celkem legit.)

To chování == je nečekané chování, neříkal bych přímo zranitelnost, ale chápal bych, kdyby z toho nějaká zranitelnost vzešla.

Ink

  • *****
  • 674
    • Zobrazit profil
    • E-mail
Re:Framework Bottle pro Python
« Odpověď #19 kdy: 14. 04. 2025, 20:23:00 »
Používat is na porovnávání čísel je dost hloupý nápad. Viděl jsem to v kódu jenom jenom jednou a code review to zatrhlo.


Re:Framework Bottle pro Python
« Odpověď #20 kdy: 14. 04. 2025, 20:34:18 »
Jo, ten problém s porovnáním čísel přes is je trochu obskurní. Ne všechno, co z toho vypadne, musí být vždy relevantní, a to i pokud je to pravdivé. Jako generátor potenciálně relevantních věcí, které si ověřím, to ale může být celkem efektivní.

BTW: Problém s porovnáním čísel přes is se týká i Pythonu 3. Já ten problém znám z Javy, kde se to týká boxed typů při ==, a též to v některých případech funguje díky cacheování, byť manuální new Integer(…) to dovede rozbít.

CPU

  • *****
  • 1 052
    • Zobrazit profil
    • E-mail
Re:Framework Bottle pro Python
« Odpověď #21 kdy: 14. 04. 2025, 23:12:00 »
V nejsrandovnějších dobách pythonu 2.2 nebo 2.3 fungovalo něco jako tohle:

Citace
heslo_admina = "1234"
if heslo_admina == input("Zadej heslo admina:"):
    print "Jsi admin!"
else:
    print "Nejsi admin!"

A IF vyhodnotil jako TRUE jednak pro 1234 a jednak i pro heslo_admina :P
Protože if heslo_admina == heslo_admina  :P

Ostatní věci si nechám pro sebe.

Re:Framework Bottle pro Python
« Odpověď #22 kdy: 14. 04. 2025, 23:51:38 »
Na první pohled jsem si říkal: totální WTF. Ale on problém není v porovnávání, jak by to mohlo vyznít, ale ve funkci input, která je v této podobě patrně v Pythonu 2 až do konce. (Python 3 už se chová jinak.) Vstup se totiž prožene přes eval, takže když do konzole napíšu heslo_admina, tak se to vyhodnotí jako "1234". Snad jediné, co se tu liší poslední Python 2 od ještě staršího Pythonu, je absence typové koerce u porovnání. Takže s aktuálním Pythonem 2 nebude fungovat legitimní scénář.

Zároveň ten legitimní scénář nebude fungovat pro většinu nečíselných hesel, ani ve starém Pythonu

CPU

  • *****
  • 1 052
    • Zobrazit profil
    • E-mail
Re:Framework Bottle pro Python
« Odpověď #23 kdy: 15. 04. 2025, 00:18:24 »
Na první pohled jsem si říkal: totální WTF.

Takže se povedlo zopakovat? Ja to z toho postu totiž jednoznačně nevyčtu.

Že to je hloupý příklad, no ano, tohle je samozřejmě jen ilustrační kód.
Jednak toho, jaké bezpečnostní WTF momenty tam člověk zažije.
A jednak toho, jak moc dokonale musí člověk chápat to, co se děje pod kapotou, aby dokázal psát +/-bezpečný kód.

Udělat podobnou botu totiž není velký problém, hlavně kdyz je na stránce hodně políček typu stránkování, další, předchozí, hledání, validace zadaných hodnot a podobně. Pořád jsme u pythonu 2.x

A pak srandy s deserializací pickles, injekcí kódu, SQL injections co PHP vyřešilo přes stored procedures už za krále klacka...

Ale nechme Python 2.x hnít v hrobě, co Python 3.x?
« Poslední změna: 15. 04. 2025, 00:22:38 od CPU »

Re:Framework Bottle pro Python
« Odpověď #24 kdy: 15. 04. 2025, 09:03:55 »
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/hashes

Deserializace – 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í.