Hitilafu ya uingizaji wa HTML (HTML injection) iliyohifadhiwa kwenye ubao wa kazi wa RamenHire ilimruhusu mtu yeyote kujaza fomu ya umma na kugeuza barua pepe za taarifa za timu kuwa jukwaa la phishing.

Jinsi hitilafu hiyo ilivyopenya

RamenHire inatumia Next.js na Supabase na inaruhusu kampuni changa (startups) kutangaza kazi bila kuingia (logging in). Kila ombi linachochea barua pepe kwenda kwa timu ya ndani ya uajiri. Mwili wa barua pepe unajengwa kwa kuunganisha maeneo ya fomu (form fields) kama yalivyo—jina la kampuni, maelezo ya kazi, jina la mawasiliano—moja kwa moja kwenye mfuatano wa HTML (HTML string). Hakuna ulinzi wa herufi (escaping) au usafishaji (sanitisation) unaofanyika kabla ya mfuatano huo kufikia huduma ya barua pepe.

Kwa sababu kiolezo (template) kinachukulia ingizo la mtumiaji kama HTML salama, mwombaji mwenye nia mbaya anaweza kuingiza kiungo feki cha “bonyeza hapa ili kuthibitisha”. Payload hiyo huhifadhiwa kwenye seva kama sehemu ya tangazo la kazi, hivyo kila barua pepe inayofuata ya taarifa hubeba kodi hiyo mbaya. Mshambuliaji anaweza kuficha kiungo hicho karibu na kitufe halisi cha “View Dashboard”, akimdanganya mwanachama wa timu afichue sifa za uingiaji (credentials) au kutembelea tovuti ya phishing.

Kwa nini ilikuwa muhimu

Barua pepe hizo huenda kwa timu kuu ya uajiri, watu ambao hubonyeza viungo mara kwa mara ili kuwasilisha wagombea katika mchakato wa uajiri.

Pengo la kiufundi

Kuzuia uingizaji wa HTML (escaping HTML) si hatua moja tu. Muktadha mbili unahitaji ulinzi:

  • Text nodes – maudhui kati ya lebo (tags). Kubadilisha < kuwa &lt; na > kuwa &gt; huzuia lebo, lakini hakuzuia mshambuliaji kutoka nje ya thamani ya sifa (attribute value).
  • Attribute values – mfuatano wa maandishi ndani ya lebo kama href="…". Kuingiza alama ya nukuu (" au ') kumruhusu mshambuliaji kufunga sifa mapema na kuingiza alama zake (markup).

Kodi ya awali ilishughulikia maandishi ya kawaida tu, na kuacha uingizaji wa sifa (attribute injection) wazi kabisa.

Kutatua tatizo

Msimamizi wa programu (developer) aliongeza msaidizi mdogo wa escapeHtml na kuutumia kwenye kila thamani inayotolewa na mtumiaji kabla ya kuingizwa (interpolation), iwe thamani hiyo inaishia kwenye text node au kwenye sifa (attribute).

Hatua za uhakiki

  • Local testing – Mfululizo wa mfuatano wa uingizaji (injection strings) uliwekwa kwenye kazi za kiolezo. Kila jaribio lilionyesha herufi zilizolindwa tu, bila lebo zinazoweza kutekelezwa.
  • Production testing – Baada ya kusambaza marekebisho (patch), payload iliwasilishwa kupitia tovuti hai, ikifaulu ukaguzi wa bot wa Cloudflare Turnstile. Barua pepe iliyopatikana iliingia kwenye sanduku la barua la msimamizi; kiungo kibaya na lebo zozote za script zilionekana kama maandishi yaliyovurugika, si kama vitu vinavyoweza kubonyezwa.

Kumbuka kuhusu Gmail: huduma hiyo bado inaweza kupaka rangi ya bluu URL na kuifanya iweze kubonyezwa, lakini hiyo ni urahisi wa upande wa mteja (client-side) na haimaanishi kuwa uingizaji wa HTML umefanikiwa. Marekebisho haya yanazuia uingizaji huo kutengeneza vitufe halisi au kuendesha skripti.

Mambo ambayo watengenezaji wanapaswa kuzingatia

  • Usiamini kamwe data kutoka kwenye fomu za umma – Hata fomu zinazoonekana zisizo na hatari zinaweza kuzalisha matokeo yaliyohifadhiwa yanayotumika mahali pengine.
  • Linda (escape) wakati wa matumizi – Tumia ulinzi unaozingatia muktadha (text dhidi ya attribute) kabla tu ya kuonyesha (rendering), si mapema zaidi katika mchakato.
  • Jaribu upande wa mteja na upande wa seva – Majaribio ya unit (unit tests) hukamata makosa ya wazi; jaribio la mwisho hadi mwisho (end-to-end) la kmanual kupitia UI hai linathibitisha kuwa ulinzi unadumu chini ya trafiki halisi.
  • Kuwa mwangalifu na tabia za ajabu za programu za barua pepe – Baadhi ya programu hufanya URL ziwe viungo moja kwa moja, jambo linaloweza kuleta hisia ya uongo ya usalama. Hakikisha HTML ya msingi haina vipengele hai.

Hitimisho

Kosa moja tu la kutojali katika kushughulikia ingizo la mtumiaji kuligeuza barua pepe za kawaida za taarifa kuwa njia ya phishing. Kuanzisha utaratibu mpana wa ulinzi wa HTML (HTML-escaping) na kuhakiki marekebisho hayo ndani ya mashine yako (locally) na kwenye mfumo hai (production) kulirejesha uadilifu wa sanduku la barua. Tukio hili linasisitiza somo la kudumu kwa programu yoyote ya wavuti inayozalisha HTML kutoka kwa data isiyoaminika: usafishaji (sanitisation) sahihi hauwezi kuepukika, na kuipuuza kunaweza kufungua njia ya moja kwa moja hadi kwenye sanduku la barua la watumiaji wako.