Ar trebui să fie suspendate pluginurile menținute din depozitul WordPress atunci când există o problemă de securitate?

Publicat: 2020-03-12

Pe 27 februarie 2020, la ora 21:34 (CET), am primit un e-mail prin care ne anunța că pluginul nostru WP Activity Log a fost „retras temporar din directorul de pluginuri WordPress.org din cauza unui exploit” .

Am trimis o remediere vineri, 28 februarie 2020, la 16:08. Ne-a luat doar 16,5 ore să lansăm remedierea. Am fi rezolvat problema mult mai devreme dacă acest lucru s-ar fi întâmplat în timpul programului nostru normal de lucru (avem sediul în Europa), deoarece avem un timp de răspuns foarte bun (referință).

Pluginul nostru a fost reinstalat luni, 2 martie 2020, la ora 13:00. Adică la 69 de ore după ce am trimis remedierea. Este important de menționat că echipa a luat atât de mult timp pentru a restabili pluginul din cauza weekendului.

Jurnalul de activitate WP a fost retras din repo

De ce scriu asta?

Aș dori să subliniez că cred că pluginurile neîntreținute care au probleme de securitate ar trebui suspendate din depozitul WordPress. De asemenea, am un respect enorm pentru munca pe care o fac voluntarii din echipa de examinare a pluginurilor și îmi asum, de asemenea, întreaga responsabilitate pentru problema de securitate raportată.

Cu toate acestea, cred că problemele de securitate raportate în pluginurile întreținute ar putea fi gestionate mai bine. Datorită modului în care sunt gestionate în acest moment, reputația plugin-ului primește un mare impact negativ, iar utilizatorii și site-urile lor sunt puse în pericol. Prin urmare, la sfârșitul acestei postări evidențiez câteva posibile îmbunătățiri care ar putea ajuta și cred că ar trebui luate în considerare. Ideea este de a pune întotdeauna mai puțini utilizatori în pericol și de a reduce impactul asupra pluginului și dezvoltatorilor.

În această postare, documentez, de asemenea, toate detaliile a ceea ce s-a întâmplat și explic vulnerabilitatea cazurilor marginale de severitate scăzută raportată în pluginul nostru.

Care este procedura de raportare a unei probleme de securitate a pluginului WordPress?

Din liniile directoare oficiale din manualul pluginurilor:

Fiecare încercare de a contacta direct dezvoltatorul trebuie făcută înainte de a ne raporta pluginul (deși înțelegem că acest lucru poate fi dificil - verificați mai întâi codul sursă al pluginului, mulți dezvoltatori își listează e-mailurile). Dacă nu îi puteți contacta în privat, vă rugăm să ne contactați direct și vă vom ajuta.

Ce s-a întâmplat în cazul nostru?

Facem foarte clar în plugin cine îl dezvoltă. Uită-te la pagina de plugin din depozit și îți vei face o idee! De asemenea, vă este foarte ușor să ne contactați.

Cu toate acestea, nimeni nu ne-a raportat problema de securitate înainte ca pluginul să fie retras temporar din depozitul de pluginuri. Așa că cineva a raportat problema echipei de examinare a pluginurilor WordPress și a retras temporar pluginul nostru din depozit fără nicio notificare prealabilă.

Înainte de a ne arunca o privire asupra de ce și ce, și ce este bine, rău și ce poate fi îmbunătățit, să aruncăm o privire la vulnerabilitatea pluginului și o scurtă explicație despre cine suntem.

Care a fost vulnerabilitatea pluginului?

Avem un asistent de instalare în WP Activity Log pentru a ajuta utilizatorii să configureze pluginul. Una dintre setările din expert vă permite utilizatorilor non-administratori să citească jurnalele de activitate.

Expertul de instalare WP Activity Log

Cu toate acestea, am făcut o greșeală; nu am verificat dacă utilizatorul care rulează vrăjitorul a fost autentificat. Prin urmare, utilizatorii neautentificați ar putea rula vrăjitorul și să permită unui alt utilizator sau alt rol accesul la setările pluginului. Cu toate acestea, aceasta este o problemă de gravitate scăzută a cazului marginal.

De ce este aceasta o problemă de securitate a cazului marginal de gravitate scăzută?

Atacatorii ar putea exploata acest lucru doar dacă:

  • asistentul de instalare nu a fost niciodată finalizat de către instalator,
  • atacatorii aveau deja un utilizator/aveau acces la un utilizator pe site,
  • Atacatorii pot obține acces doar la setările pluginului și la jurnalul de activitate.

Prin exploatarea acestor probleme de securitate, atacatorii nu obțin acces la alte privilegii pe site-ul WordPress. Prin urmare, această exploatare nu are niciun efect negativ asupra comportamentului și funcționalității site-ului în sine.

Dovada de concept

POC-ul este foarte simplu. Vizitați această pagină ca utilizator neautentificat:

http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access

Acesta este pasul vrăjitorului care vă permite să specificați cine poate vedea jurnalele. Căutați nonceul „_wpnonce” în sursa paginii HTML, copiați și inserați-l în următoarea comandă curl:

$ curl 'http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access' -d '_wpnonce=INSERT-NONCE-HERE&wsal-access=yes&editors%5B%5D= abonat&save_step=Următorul”

Odată ce vă conectați ca abonat și veți avea acces complet la setările pluginului.

De ce credem că acest caz a fost tratat greșit?

În e-mailul care ne-a fost trimis, erau următoarele:

Nu închidem pluginurile ușor, iar când vine vorba de probleme de securitate, încercăm să echilibrăm volumul de utilizatori și istoricul dezvoltatorilor cu gravitatea și potențialul de deteriorare a raportului.

Cu toate acestea, cred că pluginul nostru a fost retras prea devreme. Pana acum;

  1. Când am avut probleme în trecut, le-am rezolvat întotdeauna în câteva ore. Am procedat la fel de data asta.
  2. Am răspuns întotdeauna la timp când echipa de examinare a pluginurilor a luat legătura.
  3. Problema de securitate a afectat doar pluginul nostru (severitate scăzută) și a fost un caz limită.
  4. Problema de securitate nu a putut fi exploatată automat.
  5. Singurul daune pe care atacatorul l-ar putea face a fost să schimbe setările pluginului, să citească jurnalele de activitate sau să le curețe.

Ce părere au alți dezvoltatori despre astfel de situații?

Majoritatea dintre noi au citit deja un articol, un tweet sau un mesaj pe rețelele sociale despre probleme similare. Totuși, am vrut să aflu singur ce cred alți oameni, în special dezvoltatorii, despre asta. Cred că acest lucru este important pentru că ar putea fi unele lucruri pe care nu le văd.

Pentru început, am trimis un e-mail persoanei care a identificat problema, mulțumindu-i pentru dezvăluirea responsabilă. Răspunsul lui a fost:

„Mă bucur să văd că ai rezolvat rapid problema în plugin. BTW, am observat că oamenii de la wordpress.org l-au închis pentru câteva zile, asta a fost puțin dur și nu a fost cu adevărat necesar.” – Jerome Bruandet.

De asemenea, am făcut un mic sondaj pe grupul de Facebook Vânzarea de produse WordPress. Deși acest grup este mic, majoritatea membrilor săi sunt dezvoltatori de pluginuri și teme. Din sondaj putem observa că dezvoltatorii sunt de acord în unanimitate că, în cazul unor probleme de severitate scăzută până la medie, dezvoltatorii ar trebui să fie contactați și să li se ofere șansa de a furniza o remediere și de a nu retrage pluginul:

Dezvoltatorii de pluginuri WordPress sondajează pe grupul de Facebook

Cum pot fi îmbunătățite aceste proceduri?

Din câte știu, nu există proceduri documentate pentru când cineva raportează o problemă de securitate într-un plugin. Dacă acesta este cazul, proceduri precum cele de mai jos ar putea ajuta dezvoltatorii și, de asemenea, să pună mai puțini oameni în pericol.

Contactați dezvoltatorii și conveniți asupra unui plan de acțiune înainte de a închide pluginul

Echipa de examinare a pluginurilor poate încerca să contacteze dezvoltatorii și să confirme vulnerabilitatea înainte de a închide pluginul. Dezvoltatorii ar trebui să răspundă cu un plan de acțiune, inclusiv o dată rezonabilă pentru remediere.

Dacă este necesar, echipa de examinare a pluginurilor poate stabili un termen limită. De exemplu, dezvoltatorii ar trebui să aibă între 12 și 24 de ore pentru a remedia problema. Cu toate acestea, în unele cazuri ar putea avea nevoie de mai mult timp, în funcție de fusul orar în care se află etc. În cazul în care dezvoltatorii nu răspund, pluginul ar trebui retras din depozit.

Determinați severitatea și tipul problemei de securitate

Acest lucru ar putea fi deschis dezbaterii. Cu toate acestea, cineva cu puțină experiență în securitate poate spune cu ușurință dacă o problemă de securitate raportată poate fi exploatată automat, dacă este un caz limită sau nu și care este impactul acesteia din dovada de concept raportată (POC).

Verificați dacă dezvoltatorii respectă planul de acțiune

Ar trebui să existe un fel de verificare pentru a confirma că dezvoltatorii trimit remedierea la timp și se limitează la orice alte sarcini incluse în planul de acțiune.

Retragerea pluginurilor menținute din depozit nu ajută

În cazul pluginurilor întreținute, retragerea lor din depozit face mai mult rău decât bine. De exemplu;

  1. Faceți public faptul că pluginul are o problemă, cel mai probabil o problemă de securitate. Acest lucru ridică o mulțime de alarme și pune în centrul atenției pluginul. Acest lucru este, de asemenea, ca și cum ai invita atacatorii, spunându-le că ceva din plugin este posibil exploatabil.
  2. Expune baza actuală de utilizatori ai pluginurilor, deoarece dintr-o dată, site-urile lor au devenit o țintă. Majoritatea utilizatorilor nu au idee despre ce ar trebui să facă, mai ales dacă funcționalitatea pluginului este esențială pentru site-ul și afacerea lor.
  3. Creșteți șansele de a întârzia remedierea. Acest lucru este cauzat de obicei de lipsa de comunicare sau din cauza sărbătorilor și weekendurilor.

S-ar putea argumenta că prin retragerea unui plugin din depozit, opriți propagarea infecției. Cu toate acestea, dacă problema de securitate este de severitate scăzută, exploatarea nu poate fi automatizată, iar dezvăluirea este responsabilă, nu există riscuri implicate sau riscurile sunt extrem de scăzute.

Disclaimer: Acesta nu este un atac

Aș dori să subliniez că acesta nu este un atac împotriva echipei de examinare a pluginurilor WordPress sau a oricărei persoane implicate în aceste procese. Sincer, le respect munca și știu că ceea ce fac este făcut cu bună credință. Cu toate acestea, există cu siguranță un loc de îmbunătățire, ca în orice alt sistem și proces.

Mulți îmi vor spune probabil că, dacă vreau o schimbare, ar trebui să mă ofer voluntar în loc să scriu această postare.

Încerc să mă alătur de ceva vreme; Am vorbit cu mai multe persoane de la diferite WordCamps pentru a mă implica și, de asemenea, am monitorizat pagina Creați pluginuri WordPress pentru apeluri pentru voluntari. Cu toate acestea, în ultimii ani nu au avut niciun loc vacant. Când au avut nevoie de ajutor, au adăugat noi membri numai prin invitație.