Don Lee speaks about Xiaoman – small fullness
When the moon reaches its full it starts to wane.
When the cup of tee is full it starts to spill.
And when power reaches its peak it starts to decline.
v 0.7 | "Chaos is inevitable and somehow enjoyable"
Don Lee speaks about Xiaoman – small fullness
When the moon reaches its full it starts to wane.
When the cup of tee is full it starts to spill.
And when power reaches its peak it starts to decline.
Както писах преди време, че нещо голямо се задава – ще бъда лектор на WordCamp Europe 2026!
Ще говоря за две неща, които ме бутнаха напред в моята кариера и за които говорих на Cybersec usergroup-а на dev.bg, на OpenFest 2025 и сигурно на още много места – WordPress и Security.
Всичко започна преди доста годни (домейна към момента е на 19 години така, че няколко месеца/година след регистрацията) с една Joomla! която в последствие ме вкара в web development-а, но след редица грешни решения на Joomla дойде време да се разделим и минах към CMS-а, който бута малко 43% от ЦЕЛИЯ (видим) Интернет и 62% от CMS пазара.
С годините мигрирах от споделения хостинг на superhosting.bg (преди да ги купят) към Vultr, след това на моя home server (vortex и marvin) и накрая, от вече няколко години – в DigitalOcean. И понеже не обичам да НЕ оптимизирам неща покрай себе си ми се струваше, че 1GB RAM и 1vCPU са прекалено много за един клет блог така, че реших да се насоча към кеширане, FPM, mySQL оптимизации и още много малки и големи трикове. И изведнъж видях как се освободиха значителни ресурси. А после дойде и downscale initiative-a и сега блога, cdn-check и още няколко проекта си живеят съвсем комфортно на 1vCPU и едва 1GB RAM:
Тоест 430МБ RAM на разположение (available) и пог-оре виждате натовраврането на CPU-то.
Та когато видях, че WordCamp Europe, най-голямото WordCamp събитие в Европа и едно от най-големите в света, имат CfP (Call for Papers) реших да се включа с тема, която ми е близка – как да натъпчем колкото можем повече WordPress в малък VPS.
И демото щеше да е просто – щях да използвам вече направеното в dev.bg workshop-а за сигурност, което както и бях обещал, живее тук – https://github.com/NedkoHristov/WordPress-Security-or-keep-yourself-positive-dev-bg-webinar (и е под GPL лиценз, така, че няма проблем да си го вземете и използвате и вие), да емулирам малко постове, WooCommerce плъгини и още малко неща и кот-такоа.
Накрая приключих с цялостен docker compose, който вдига nginx + mariaDB + apache + k9 + playright + grafana/logi/prometheus, абееее 100000 неща. И съм доволен. Дори имам скрипт, който следи за точно определено събитие за да направи правилни screenshots за презентацията. Този път съм доволен то себе си, ти да видиш.
Събитието ще е в Краков, Полша и е второто ми такова извън страната за тази година.
Доволен съм.
Линк към LinkedIn поста
Е – най-накрая го постигнах. С ръка на сърцето мога да кажа, че съм в най-лошата форма в живота си.
И не преувеличавам – на медикаменти за кръвно и пулс съм от много време, бях на ръба на инсулиновата резистентност (бях, но не съм си правил скоро изследвания), ментално съм до никъде. Единственото, което имам са децата и съответно хвърлям всичката си енергия там.
А това е смазващо. Особено като си дойдат при мен и видя понякога каква деградация е било и се отчайвам от всичко. Нямам думи да опиша колко жестоко разочарован съм от себе си, от златина, от света и живота си като цяло.
Нямам абсолютно никакво желание да продължавам напред в каквото и да е отношение. Никакво.
Идвам да кажа, че marp е жесток инструмент! Ей сега разцъквах покрай слайдовете за конференцията за която ще пиша скоро и попаднах на този инструмент. Може да конвертира MarkDown файлове в много неща две от които са PPTX (powerpoint), PDF или направо в HMTL. Това ще рече, че мога да си променям SLIDES.md файла и при commit или PR може да пали pipeline, който да генерира презентацията в няколко формата.
Скоро ще пусна лекцията заедно с md файла и инструкции как да си ги направите в нужния формат.
Идвам да оставя линка за copy.fail за исторически цели. Много е интересно как има уязвимости, които са well known и не са пачнати от години. Тук оставям и по-дългия writeup по темата https://xint.io/blog/copy-fail-linux-distributions
Има два начина за mitigation:
Module unloading (без рестарт, за текущия kernel):
# Blacklist the module to prevent it from loading
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
# Remove the module from the current kernel
sudo rmmod algif_aead 2>/dev/null || true Правилния начин (с debian based distributions):
sudo apt update && sudo apt upgrade
sudo reboot Ако използвате WSL тогава отвътре в инстанцията няма да можете да фикснете проблема, трябва да вдигнете версията на wsl kernel-а с:
wsl --update Ако използвате multi-tenant среда, CI/CD runners или workloads, които са containerized имплементирайте seccomp профили за да блокират създаването на AF_ALG сокети.
Понеже fix-а е в linux kernel фикса е най-добре да се приложи с рестарт, защото дори и да имате един user в системата не е сигурно дали нямате други уязвимости/backdoors така, че uptime reset не е по-важно от този фикс.
И успех на всички, които трябва да bake-ват нови images и да деплойват (особено пък тези, които имат решения, които имат общо с linux internals).
Добре де, нещата малко ескалираха при подготовката за DEV.BG – от bulletpoint lecture (която лесно може да отиде към death by powerpoint) взех, че направих intentionally vulnerable WordPress plugin и тема, които са с повечето известни уязвимости (като гравитацията е около OWASP® Foundation). Всичко това много добре документирано (умря циганката …) и с абсолютно всички примери, които дадох и на почти двучасовия workshop.
Част от темите, които засегнах бяха класическите (и най-разпространени):
* Cross-Site Request Forgery
* Insecure Direct Object Reference
* Remote Code Execution
* Supply Chain Attack
* SQL Injection
* и още няколко дребни
Всичко това в docker compose (с команди как да си вдигнем всичко и как да го затрием), който тръгва точно по начина по който вървеше при мен на демото. И понеже моята същност се връща отново и отново в първата ми голяма сцена на QA: Challenge Accepted когато говорих за performance testing не се сдържах и добавих опция да напълним празния WordPress с доста данни (които са близко до реалните такива по това, което виждам поне в www.nedko.info ) и да направим benchmark с тези данни, след оптимизация (каква – в документацята) като има дори и PoC за с и без Redis caching.
Вътрешното ми чувство обаче ме спря ден преди събитието и реших, че понеже този webinar така и така ще отнеме половин работен ден по-добре да дам всичко от себе си. И ето, че вече имаме и скенер за уязвимости (wp-scan), дори и демо за bruteforce с enumeration & dictionary атака, nginx и PHP препоръки за фиксове на OS ниво и сигурно още неща, които забравям.
Мисля, че това е най-пълния списък, който съм намирал в интернет по темата хем за сигурност, хем за WordPress особено като се има предвид и демо плъгина и темата. Всичко това под MIT лиценз.
Линк към репото:
https://github.com/NedkoHristov/WordPress-Security-or-keep-yourself-positive-dev-bg-webinar
Благодарности на Nemetschek Bulgaria, които за пореден път ми се връзват на налудничевите идеи (скоро идва анонса на нещо много голямо) и на DEV.BG с които организацията както обикновено, е страхотна.
Излишно е да казвам, че всичко това е само за обучителни цели.
Ако някой има интерес към материята и иска нещо, което не е вътре – пишете, интересно ми е и ще надграждам.
// копие на поста ми от linkedin
Напоследък не пиша много, но и програмата ми е просто невъзможна.
Тази седмица бях в София за почти цялата седмица, а в Понеделник правих първия си webinar, който по стара моя традиция направих по-дълъг, но не с 2-3 минути както по конференциите, а с почти час – стана общо 1:50 часа в който си говорихме (е, аз говорих само, беше малко странно без feedback), се получи добре. Този път си начесох крастата НАЙ-НАКРАЯ и цялото нещо беше 80% демо – команда по команда
Смятам, че ще е полезно на хора от бранша за да видят колко е лесно да счупим нещо и колко е важно да разбираме как работят отдолу нещата.
Тук са всички attack vectors които дискутирахме. За всяка една от тях имаше три задължителни точки:
Освен webinar-а бяхме по срещи от сутрин до вечер и петък вече бях с единия крак в гроба.
Но пък ми се случи нещо интересно – на връщане в самолета до мен човек тъкмо приключи общатта книга на Лий Чайлд и брат му – Андрю Чайлд – “Изходна стратегия”. Беше ми любопитно какво мисли, защото четох противоречиви мнения и след кратко мнение по темата ми я подаде и каза – “Твой ред е да я прочетеш”. Напомням, че ние мъжете получаваме по 1-2 подаръка през годината – на Нова Година и на рождения ден (евентуално) така, че за мен беше много приятен random act of kindness. Започнах я и изядох първите 30-тина страници в самолета – изглежда обещаваща.
Освен ВСИЧКО ОСТАНАЛО в четвъртък имахме vibe-a-ton в офиса в София – нещо като хакатон, но с фокус върху vibe coding-а. Оказа се, че съм супер назад с AI оркестрирането. Бях в много силен отбор със Стоян и Виктор, които са ми колеги от ДевОпс отдела, но към края не ни стигна времето и не можахме да produce-нем нещото (заради, оказа се после, една nginx директива и това, че бяхме вдигнали Ollama, но в нея не бяхме стартирали Gemma 4). Обаче пък натрупах доста впечатления за vibe coding-а – ще споделям при първа възможност. Само да кажа, че ни счупиха маркетинг отдела в който няма нито един човек, който разбира от програмиране. Не е зле, а? Изводи, изводи.
Понеже последните дни не бях в града съответно не съм и с децата, които адски ми липсват.
И реших да хвърля малко дяволи преди да съм се побъркал. Вчера излязохме с Явката да покараме по черно около Аладжа Манастир и с компания чувството е супер различно. Моя профил е на шосе и в гората още ми е трудно да се ориентирам по маркировка, дупки, клони (и диви прасета, които ни излязоха Октомври месец когато с Тедо карахме подобен маршрут, но по тъмно), но с някой опитен пред мен беше топ. Хвърлих всички дяволи и си казах – това е, мина ми.
Е, не ми мина.
Снощи беше от трудните вечери с малко сън и много събуждане, да не ви кажа и какви неща сънувах … Та на сутринта си взех екипировката, проверих колелоти и хайде към Балчик. Скоро ми предстои шосейно състезание и трябваше да си видя лимитите. Работата не е особено добре – за тази година съм прекарал само 17 часа на колелото и 300 км с под 3км Д+, което е супер малко. Но пък си изпънах дяволите по баирите на Оброчище, след Балчик и обожемой – неочвешкия баир, който всъщност включва два – този на Златни Пясъци и този след него към чешмата на Аладжа Манастир. Имаше моменти в които се чувствах много силен, но след 50-55 км. нещо се обърка и бях на ръба на бонкинг-а последните километри. Уж спазвах формулата за прием на храна и вода, but go figure. Определено карането беше безценно, защото:
Моя лаптоп май е напът да сдаде багажа. Някакви background процеси го убиват бавно. До сега не съм виждал толкова натоварена машина ми се струва.
~ w ✔
0:55 up 31 mins, 2 users, load averages: 147,36 45,88 22,65
USER TTY FROM LOGIN@ IDLE WHAT
nedko console - 0:54 - -
nedko s000 - 0:55 - w
~ What a time to be alive.
Другата седмица имам workshop по любима тема – Security в WordPress и още не ми е останало време да си структурирам нещата. Освен това ще говоря скоро и по тема в орбитата на горната, но на много по-голяма сцена. Освен това с mentee-то бутаме ДевОпс курса по mentor the young – всичко се развива добре, но богу – свършиха ми ръцете (и мозъка) да мултитасквам на всички фронтове.
In other news ходих да карам по пътеките на Аладжа Манастир надявайки се да успея да направя добро време, защото с колегите вече говорим да ходим на Витоша 100 и освен, че изобщо не бях направи ресърча си правилно и екраните на Garmin-а ми бяха абсолютно безполезни спирах сигурно 20 пъти да гледам къде точно ми е track-а. Аматьорски грешки. Накрая за 23-24 км. направих средна скорост от около 10км/ч, което е плачевно. Последните около 5км са асфалт и реших там да натисна малко да си оправя статистиката и … спуках гума. Дори и бозата вътре не можа да закърпи положението и карах на капла и едвам-едвам докато се прибера.
После естествено мих колелото около 40 минути и изцапах половината къща, която предния ден бях почистил хубаво.
В това отношение поне шосейката е доста по-лесна за поддръжка.
И говорейки за шосето имам едно 100км каране скоро, което миналия път като карам у-м-р-я-х, да видим този път как ще е. Предполагам, че пак ще пукна по баирите и ще си съжалявам житейските избори.
Трябва да свържа часовника си с някакъв healthcheck service за да имам healthchecks та ако ритна букета някъде да пише в блога. Това си е бизнес идея!
Връщам In other news секцията, която понякога ми липсва като си гледам старите постове така, че:
Болен съм. Снощи спах около 2 часа и днес съм дроб. И още със събуждането ми в главата проехтя далечното ехо на моето юношество експериментирайки с всякаква стрнна музика и по-точно единствената на The Exploited, на която знам текста, хъхъ:
Хубавото е, че преди да ме събори каквотомиетам вчера направи може би първата тренировка на тренажора, която ме накара да се почувствам уверен в скорощното състезание, което ме очаква. Много назад съм, но съм уверен, че ще успея да завърша, макар и близо до DNF. През годините установих, че упорството ми на седалката е феноменално (за моите килограми и липса на редовни тренировки).
След тренировката излязох да си взема нещо за готвене от магазина, първо стъпало и си изкривих глезена. :D То да беше едно.