WordPress XSS ievainojamība caur wp_title funkciju

Viens no mīnusiem, lietojot atvērtā koda programmatūru, ir tas, ka visi, kam nav slinkums, lien kodā un urķējās. Tas, protams, ir labi, jo tādā veidā var ātri atrast nepilnības un tās draudzīgi izlabot. Es biju lasījis par to, ka WordPress kods ir diezgan līks. Šodien pamēģināju novērst nepilnības.

Joka pēc paskatījos, kādas ievainojamības ir atrastas. Nekas baigi traks jau nav, bet nav arī nekas iepriecinošs.

  1. WordPress “demo” Cross-Site Scripting Vulnerability
  2. WordPress “year” Cross-Site Scripting Vulnerability

Pirmo joku uz sitiena neizkodu, bet otro laikam sapratu. Problēma ir tāda, ka viņiem visi mainīgie tiek definēti kā globālie mainīgie. Ups. Viens no tiem $year, kas atbild par gada sadaļu vispār netiek filtrēts. Ko tu šim iedo, to viņš dod ārā. Rezultātā puikas var paspēlēties ar title birkas saturu.

Mēs varam smuki aizvērt title birku un tālāk ievadīt savu html kodu, tajā skaitā arī JavaScript. Kaut vai šādi.

?year=%3C/title%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E%3Ctitle%3E

Piekabinam šo rindiņu kādai WordPress bloga adresei un redzēsim savus cepumiņus. Viss ir jautri, kamēr mēs darbojamies pa savu datoru, problēmas var rasties, ja izdomāsim ar kādu “pajokot”.

Risinājums ir salabot, lai $year mainīgais filtrē datus, kas tam tiek padoti.

Daļa no ielāpa ir redzama šajā lapā, bet tas kods nav korekts, jo šī

$wp_query->get_queried_object()->post_title

ir PHP5 sintakse. PHP4 gadījumā būtu jāizmanto šis te koda gabals.

Ja godīgi, tad es īsti nesapratu, ko viņi tur salaboja. Man radās iespaids, ka viņi salaboja ne to mainīgo, jo pēc to izmaiņu veikšanas tāpat viss rullēja uz nebēdu. Es piedāvāju sekojošu pagaidu risinājumu, kamēr nebūs uztaisīts ielāps.

Kaut kur orientējoši ap 200 rindiņu failā general-template.php par kuru uzzināju no iepriekš minētā piedāvātā risinājuma.

if ( !empty($year) ) {
$title = (int)$year; // šeit kabinam klāt (int)

Mainīgā $year saturam ir jābūt skaitliskai vērtībai un basta, ja nav, tad arī pīrādziņu nav. Bet es ceru, ka kāds profesionāls programmētājs ieteiks labāku risinājumu. Varbūt, ka tas viss ir jālabo pavisam savādāk.

Ja nu kāds no šīs putnu valodas neko nesaprata, tad es neredzu iemeslu kāpēc gan tagad vajadzētu nervozi stūrītī pīpēt. PHP kodu tur iekabināt nevar un ar cepumiem jau sen cilvēki spēlējās. Gan jau iznāks ielāpi, tad arī svīdīsim pie to uzlikšanas.

Tweet about this on TwitterShare on FacebookShare on VKShare on RedditShare on Google+Share on LinkedInEmail this to someone

9 komentāri par “WordPress XSS ievainojamība caur wp_title funkciju

  1. murmulis

    (int) – cast someting to int
    intval() – parse content as int

    imho, vismaz java taa tas buutu 🙂
    (int) vargjenereet castoshanas exception
    intval() visticamaak neko negjenerees no kljuudaam un atgrieziis tikai null vai kaut ko tik pat defaultu, kas nu php ir defaults

    Atbildēt
  2. CooLynX Raksta autors

    Shadowbird, gads un mēnesis ir vajadzīgs, lai redzot adresi uzreiz varētu noprast par to kāda informācija tā ir un kad tā tika publicēta. Tā kā es neplānoju ļoti aktīvi publicēties, tad man dienas nav tik būtiskas.

    Atbildēt
  3. Shadowbird

    CooLynX: Tad jau pēc tādas pašas ideoloģijas raksta saitē vajadzētu būt redzamam arī autoram (ja konkrētajā vietnē tādu ir vairāki), tēmai (tipa kateogrija), utt…?

    Vispār vajadzētu uztaisīt aptauju, cik daudz cilvēki reāli pievērš uzmanību bloga raksta saitē norādītajiem datumiem. Turklāt ņemot vērā, ka liela (ja ne lielākā) daļa saišu ir ar kaut kādu aprakstošu nosaukumu, kas nozīmē, ka to datumu tāpat neredz (ja speciāli neskatās), kamēr nav atvērta pati ziņa.

    Var jau būt, ka es esmu vienīgais, kam patīk arī ar pirmo reizi viegli iegaumējamas adreses, bet pilnīgi noteikti neesmu vienīgais, kam tie cipari ir pilnīgi vienaldzīgi. Patiesībā nezinu nevienu, kuram tā nebūtu, izņemot, acīmredzot, tevi. Un varbūt Kirilu. 🙂

    Atbildēt
  4. CooLynX Raksta autors

    Tas ir stāsts par SEO un tādām lietām. Visam ir savs pamatojums un loģika apakšā. Tas, ka lielākā daļa par to nemaz nenojauš, nenozīmē, ka šie principi nebūtu jāievēro.

    Atbildēt
  5. Atbalss: WordPress 2.1.3 jeb pirmais » Latvijas interneta pods

Ieraksti komentāru

Tava e-pasta adrese netiks publicēta.