Dezvoltatori de pluginuri și teme: aceasta este ceea ce puteți învăța din vulnerabilitatea de securitate a SDK-ului nostru
Publicat: 2019-03-02Săptămâna aceasta a fost destul de intensă pentru echipa noastră, deoarece a trebuit să ne confruntăm cu o vulnerabilitate de securitate. Securitatea este prioritatea principală pentru noi și aceasta este prima vulnerabilitate majoră găsită în SDK-ul nostru în patru ani. Din păcate, ca și în cazul oricărui software, dezvoltatorii sunt și ei oameni, așa că se întâmplă greșeli, indiferent dacă sunteți un dezvoltator independent, un magazin de teme de 20 de persoane sau Google. Scopul acestui articol este în primul rând transparența, dar și să vă ofere o perspectivă asupra modului în care am gestionat incidentul și a ceea ce puteți învăța din acesta.
Luni, 25 februarie 2019, am primit un e-mail de asistență de la un dezvoltator util care a dat peste o problemă GitHub în depozitul WooCommerce. Problema a fost creată de un reprezentant al unei mici companii de găzduire care a observat activitate suspectă pe serverele lor. Reprezentantul a inclus jurnalele de activitate relevante care au indicat două atacuri potențiale, iar unul dintre ele viza un plugin care rula SDK-ul Freemius.
Întrucât luăm securitatea foarte în serios, am efectuat imediat o investigație amănunțită și am confirmat că vulnerabilitatea se afla într-adevăr în SDK-ul nostru.
Datorită gravității vulnerabilității, am început să lucrăm imediat la o remediere. După doar câteva ore, am lansat o etichetă corectată și am notificat toți dezvoltatorii care foloseau o versiune SDK vulnerabilă pentru a actualiza SDK-ul pentru toate produsele lor cât de curând. De asemenea, am actualizat problema inițială GitHub pentru a informa echipa WooCommerce despre aceasta (problema GH pe care am eliminat-o după câteva ore pentru a reduce expunerea).
Pentru a atenua expunerea și pentru a oferi tuturor o perioadă de „grație” pentru a se actualiza la versiunea fixă, am întrebat dezvoltatorilor două lucruri:
(a) Dacă această actualizare de securitate va fi inclusă în jurnalul dvs. de modificări, vă rugăm să utilizați numai cuvinte generice precum „Remediere de securitate”.
(b) Chiar și după actualizarea și lansarea versiunilor corectate, vă rugăm să nu dezvăluiți această problemă în următoarele 30 de zile, acordând suficient timp tuturor partenerilor noștri și utilizatorilor lor să se actualizeze.
La doar o zi după, un site web care acoperă vulnerabilitățile pluginurilor (în mod intenționat nu le trimitea sau nu menționează numele lor) a publicat o postare despre vulnerabilitate, inclusiv informații despre cum să o exploatezi în timp ce numește câteva dintre pluginurile afectate. Acest lucru ne-a luat prin surprindere, deoarece tocmai am notificat dezvoltatorii de pluginuri și teme despre problemă cu mai puțin de 24 de ore înainte. Nu ne-au contactat și nici nu au urmat practica de piață a Dezvăluirii responsabile , pe care o considerăm destul de iresponsabilă și lipsită de etică.
Le-am contactat cerându-le să anuleze temporar raportul pentru a reduce expunerea și pentru a oferi dezvoltatorilor noștri și utilizatorilor lor șansa de a actualiza versiunile corectate înainte ca acesta să atragă atenția nedorită din partea mai multor hackeri. Dar persoana cu care am comunicat, care nu și-a dezvăluit niciodată numele (i-am întrebat), are propria ideologie dreaptă și pare că bunul simț nu-i atrage cu adevărat. Am încercat să explic situația problematică și riscul crescut pe care îl expun multor dezvoltatori și utilizatori, dar eforturile mele au căzut în urechi surde și mi-am dat seama că schimbul meu de e-mail a fost doar o pierdere de timp.
Pe măsură ce comunitatea noastră de dezvoltatori își actualiza pluginurile și temele la noul SDK pe care l-am lansat, am descoperit două probleme:
- Mai mulți dezvoltatori nu au primit e-mailul nostru de alertă deoarece s-au înregistrat la Freemius cu o adresă de e-mail pe care nu o verifică.
- În mod intenționat, nu am semnalat eticheta GitHub corectată ca lansare oficială pentru a nu atrage atenția. Cu toate acestea, am aflat că dezvoltatorii care foloseau Composer pentru a-și actualiza bibliotecile nu primeau cea mai recentă actualizare, deoarece packgist preia doar versiunile, cu excepția cazului în care specificau o etichetă în mod explicit.
Pentru a depăși aceste probleme:
- Deoarece vulnerabilitatea a fost deja publicată public, în urmă cu două zile am semnalat versiunea corectată ca o versiune oficială, astfel încât dezvoltatorii care se bazează pe packgist să poată actualiza.
- Mai devreme în această dimineață, am trimis prin e-mail un alt lot de mesaje dezvoltatorilor care încă nu au actualizat SDK-ul pentru toate produsele lor. De data aceasta, am trimis mesajele către canalele lor oficiale de asistență pentru a crește șansele ca toată lumea să primească corect e-mailurile.
Chiar dacă am vrut să amânăm publicarea acestei vulnerabilități cu cel puțin două săptămâni, am primit o interogare suplimentară de la WP Tavern, în care ne-am cerut părerea înainte de a publica propriul articol pe această temă, care a fost paharul care a spart paharul tastaturii dezvoltatorului.
Greșelile pe care le-am făcut și ce puteți învăța din ele
Privind înapoi la incident, am făcut mai multe greșeli pe care le-am putea evita cu ușurință și le-am fi făcut viața tuturor mult mai ușoară.
Intră în modul silențios și alertează doar pe cei care trebuie să știe
Deoarece eram atât de nerăbdători să rezolvăm problema cât de curând, am făcut personal o greșeală de „începător” care a atras prea devreme atenția nedorită. Am continuat și am trimis remedierea în depozitul GitHub pe care îl folosim pentru a gestiona SDK-ul. Nu numai că depozitul este public, dar am explicat soluția și am folosit cuvântul „securitate” în el.
Cea mai bună abordare a fost să creați o versiune privată/închisă a depozitului, să corectați problema de securitate acolo și să o expuneți doar dezvoltatorilor relevanți, în loc să o faceți publică. Acest lucru nu ar atrage atenția „vânătorilor de vulnerabilități”.
Nu-ți pierde energia cu „troli de securitate”
A doua greșeală a fost încercarea de a interacționa cu compania din spatele site-ului care a publicat vulnerabilitatea. A fost o pierdere totală de timp și energie și a declanșat doar mai mult antagonism, care a sfârșit cu o altă postare despre vulnerabilitate. Aș spune că un indicator bun pentru a decide dacă merită timpul să contactați un autor al unei postări care riscă utilizatorii pluginului sau a temei, este dacă în spatele postării/site-ului/companiei există un nume. Dacă se ascund în spatele proxy-urilor și acționează irațional, șansa ca să le poți vorbi sens este practic zero.
Deci, acesta este sfatul meu - intră în modul silențios și anunță doar persoanele care trebuie să știe despre vulnerabilitate. În cazul unui plugin/temă, acesta este utilizatorii dvs. Aceasta este, de asemenea, o bună oportunitate de a sublinia importanța colectării e-mailurilor utilizatorilor dvs. Dacă nu aveți o modalitate de a comunica în mod privat cu utilizatorii dvs., nu aveți o modalitate eficientă de a-i notifica în mod privat despre problemele de securitate.
Starea actuală a incidentului
Peste 60% dintre dezvoltatorii care folosesc SDK-ul nostru au făcut deja upgrade la versiunea corecţionată. În plus, SDK-ul vine cu un mecanism special care permite mai multor plugin-uri sau teme acceptate Freemius instalate pe același site web WordPress să folosească cea mai nouă versiune a SDK-ului dacă unul dintre produse este deja actualizat. Deci e bine.
Acestea fiind spuse, există încă multe site-uri care sunt vulnerabile. De aceea nu am menționat niciun detaliu tehnic despre vulnerabilitatea în sine și nici despre produsele afectate. Dorim în continuare să le oferim dezvoltatorilor noștri șansa de a-și corecta produsele și de a le permite utilizatorilor să se actualizeze la versiunile securizate.
Cum să reduceți riscurile de securitate în pluginul/tema dvs. WordPress?
Dacă nu aveți un fundal de securitate, Google „cele mai bune practici de securitate web” și veți găsi o mulțime de articole și practici. Citiți câteva dintre acestea pentru a fi conștienți de riscurile și greșelile potențiale moderne și tipice. Țineți cont de acestea în timpul proceselor de dezvoltare și testare. O altă practică bună este de a efectua audituri periodice de securitate prin angajarea unui cercetător de securitate. Va costa câteva sute de dolari, dar dacă vă bazați pe produsul dvs. ca principală sursă de venit, nu este o idee.
Din păcate, ca și în cazul nostru, lucruri rele încă se pot întâmpla. Chiar dacă avem o experiență de securitate foarte puternică, efectuăm analize amănunțite de cod și lucrăm cu un cercetător de securitate experimentat din comunitatea HackerOne, totuși această vulnerabilitate a strecurat în continuare prin fisuri. 😔
Cred că unul dintre motivele pentru care s-a întâmplat este că codul vulnerabil a fost adăugat de fapt la cazurile marginale de depanare și nu face parte din funcționalitatea de bază a SDK-ului. Deci, dacă există o lecție aici, tratați orice fragment de cod din produsul dvs. în același mod, indiferent dacă face parte din logica reală de afaceri sau orice altceva.
Recapitulare
Problemele de securitate sunt inevitabile în lumea software-ului. Indiferent dacă ne place sau nu, într-o zi pluginul sau tema ta va avea o problemă de securitate. Problema poate fi în codul dvs., o bibliotecă/cadru pe care îl utilizați, o metodă de bază WordPress care oferă rezultate neașteptate și multe alte scenarii.
Când se întâmplă (sper că nu se va întâmpla), nu te stresa (cu siguranță am făcut-o) și acționează impulsiv - va face doar mai multe daune. Elaborați un plan metodologic de recuperare, notificați părțile afectate și fiți acolo pentru a vă ajuta utilizatorii să-și securizeze site-urile. Toată lumea știe că apar probleme de securitate, ceea ce este mai important este modul în care faci față situației.
Acestea fiind spuse, în numele întregii echipe Freemius, ne pare cu adevărat rău pentru inconvenient și vom fi aici pe tot parcursul weekendului pentru a oferi suport, consiliere sau orice alt ajutor legat de problemă. Și pentru noii noștri utilizatori, știu cât de importantă este prima impresie, iar aceasta cu siguranță nu este una bună. Sper că îi vei oferi o nouă șansă lui Freemius și, cu timpul, vei vedea caracteristicile uimitoare pe care le oferim pentru pluginurile și temele tale WordPress.