MySQL column truncation (+Wordpress exploit)

U augustu je Stefan Esser imao jedan zanimljiv post o novom tipu sigurnosnog propusta:
http://www.suspekt.org/2008/08/18/mysql-and-sql-column-truncation-vulnerabilities/

Dočekali smo i prvi masovni exploit za Wordpress, sad za sad samo password reset, ali nikad se ne zna:
http://wordpress.org/development/2008/09/wordpress-262

Uradite update svog wordpress bloga, isključite registraciju, promijenite bazu :smiley:

Isključiva krivica leži na MySQL developerima, dopuštaju predugačak input (“admin x”), i umjesto da ga odbace, odrežu zadnji dio ("admin "), a to je prema SQL pravilima za char kolone ekvivalentno “admin” :smiley:
(Inače, ko normalan koristi char kolone u 21. vijeku?)

Evo šta kaže PostgreSQL manual:

Stani, ako sam te dobro razumio, stringovi “admin” i "admin " su identični za mysql ali samo ako koristiš char, a ne varchar ?
Totalni idiotizam, ali kao što reče ko još danas koristi char.

Ne samo za MySQL, to je po SQL standardu (razmaci na kraju stringa u char kolonama služe za padding, i ignoriraju se za većinu operacija). Problem je (kao i obično), što MySQL ladno dopušta space padded input sa dodatnim znakovima na kraju (tako da je prije inserta “admin x” različito od “admin”, a nakon inserta i truncationa, “admin” == "admin "). Prije verzije 5.0.3 MySQL je također i za varchar radio truncation. Fakat ne kontam zašto ljudi i dalje koriste takav POS od baze…

Dodatak:
http://dev.mysql.com/doc/refman/5.0/en/char.html

http://www.postgresql.org/docs/8.3/interactive/datatype-character.html

P.S.
MySQL je pravo urnebesan. Ništa lično, samo mnogo tehničkih nedostataka :slight_smile: