Czy luka CVE-2018-6389 wróciła do WordPress? Łączenie skryptów metodą na atak DoS.

blog.hitme.pl 1 rok temu

W 2018 za czasów WordPressa 4.9.2 rozpoznano lukę w WordPress oznaczoną CVE-2018-6389. W skrócie, polegała ona na tym iż nieautoryzowany użytkownik (czyli każdy) mógł wywołać funkcje load[] WordPressa i zmusić serwer do każdorazowego łączenia skryptów. Nie byłoby w tym nic dziwnego, dopóki atakująca osoba nie wykorzysta tego jako metodę DoS ( Denial of Service ). Dzięki wielokrotnym zapytaniom może obciążyć serwer, co było zmartwieniem wielu osób. Powstał na to exploity, dlatego WordPress został załatany. Jednak mamy 2023 rok, WordPress 6.3 i temat powrócił.

Co to jest CVE-2018-6389?

W przypadku tego konkretnego CVE ( Common Vulnerabilities and Exposures ) oznaczonego jako CVE-2018-6389 problem polegał na tym, iż złośliwy użytkownik mógł wielokrotnie wywoływać zasoby JavaScript i CSS w taki sposób, iż każde zapytanie do serwera generowałoby nowe żądanie, a serwer nie byłby w stanie efektywnie obsłużyć dużej ilości takich zapytań jednocześnie. To z kolei mogło doprowadzić do przeciążenia serwera, opóźnień w odpowiedziach lub choćby całkowitego zablokowania witryny, co stanowi typowy scenariusz ataku DoS.

W przypadku ataku DoS poprzez tę podatność, napastnik mógłby celowo spowodować nadmierne obciążenie serwera poprzez wielokrotne żądania zasobów, co doprowadzałoby do wykorzystania dużej ilości zasobów serwerowych i powodowało problemy z dostępem do strony dla prawidłowych użytkowników.

Test podatności CVE-2018-6389.

Spreparuj poniższy URL, podmieniając MOJADOMENA na Twoją domenę. Wklej do paska adresu przeglądarki i uruchom.

MOJADOMENA/wp-admin/load-scripts.php?load=eutil,common,wp-a11y,sack,quicktag,colorpicker,editor,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check,wp-lists,prototype,scriptaculous-root,scriptaculous-builder,scriptaculous-dragdrop,scriptaculous-effects,scriptaculous-slider,scriptaculous-sound,scriptaculous-controls,scriptaculous,cropper,jquery,jquery-core,jquery-migrate,jquery-ui-core,jquery-effects-core,jquery-effects-blind,jquery-effects-bounce,jquery-effects-clip,jquery-effects-drop,jquery-effects-explode,jquery-effects-fade,jquery-effects-fold,jquery-effects-highlight,jquery-effects-puff,jquery-effects-pulsate,jquery-effects-scale,jquery-effects-shake,jquery-effects-size,jquery-effects-slide,jquery-effects-transfer,jquery-ui-accordion,jquery-ui-autocomplete,jquery-ui-button,jquery-ui-datepicker,jquery-ui-dialog,jquery-ui-draggable,jquery-ui-droppable,jquery-ui-menu,jquery-ui-mouse,jquery-ui-position,jquery-ui-progressbar,jquery-ui-resizable,jquery-ui-selectable,jquery-ui-selectmenu,jquery-ui-slider,jquery-ui-sortable,jquery-ui-spinner,jquery-ui-tabs,jquery-ui-tooltip,jquery-ui-widget,jquery-form,jquery-color,schedule,jquery-query,jquery-serialize-object,jquery-hotkeys,jquery-table-hotkeys,jquery-touch-punch,suggest,imagesloaded,masonry,jquery-masonry,thickbox,jcrop,swfobject,moxiejs,plupload,plupload-handlers,wp-plupload,swfupload,swfupload-all,swfupload-handlers,comment-repl,json2,underscore,backbone,wp-util,wp-sanitize,wp-backbone,revisions,imgareaselect,mediaelement,mediaelement-core,mediaelement-migrat,mediaelement-vimeo,wp-mediaelement,wp-codemirror,csslint,jshint,esprima,jsonlint,htmlhint,htmlhint-kses,code-editor,wp-theme-plugin-editor,wp-playlist,zxcvbn-async,password-strength-meter,user-profile,language-chooser,user-suggest,admin-ba,wplink,wpdialogs,word-coun,media-upload,hoverIntent,customize-base,customize-loader,customize-preview,customize-models,customize-views,customize-controls,customize-selective-refresh,customize-widgets,customize-preview-widgets,customize-nav-menus,customize-preview-nav-menus,wp-custom-header,accordion,shortcode,media-models,wp-embe,media-views,media-editor,media-audiovideo,mce-view,wp-api,admin-tags,admin-comments,xfn,postbox,tags-box,tags-suggest,post,editor-expand,link,comment,admin-gallery,admin-widgets,media-widgets,media-audio-widget,media-image-widget,media-gallery-widget,media-video-widget,text-widgets,custom-html-widgets,theme,inline-edit-post,inline-edit-tax,plugin-install,updates,farbtastic,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter

Jeśli Twoja witryna WordPress zwróci połączony kod JS – jest narażona.

Jeśli Twój WordPress zwraca coś takiego – jest narażony na podatność.

Jak się zabezpieczyć przed CVE-2018-6389.

W sieci można odnaleźć porady, iż w teorii miało pomóc dodanie do pliku konfiguracyjnego wp-config.php następującej dyrektywy:

define('CONCATENATE_SCRIPTS', false);

Ale wydaje się, iż dzięki temu, WordPress przestaje łączyć skrypty – ale tylko w back-endzie czyli w Kokpicie. Dlatego na tę chwilę jedynym rozwiązaniem jest dodanie dyrektywy blokady do pliku .htaccess

<FilesMatch "load-scripts\.php|load-styles\.php"> Order allow,deny Deny from all </FilesMatch>

Wartość dodaj zaraz przed domyślnym blokiem WordPressa.

Edycja pliku .htaccess, dodanie blokady.

Plik .htaccess odnajdź w głównym katalogu swojego WordPress. W celu edycji pliku możesz użyć edytora plików w panelu hostingu.

Wklej ponownie spreparowany adres URL. Tym razem WordPress powinien zwrócić błąd 403.

Błąd 403 – zablokowany zasób.

Przetestuj poprawność witryny WordPress.

Ważne! Chociaż ten kod może pomóc w zabezpieczeniu witryny przed CVE-2018-6389, istnieje ryzyko, iż może on również wpłynąć na działanie witryny, ponieważ uniemożliwi ładowanie skryptów i stylów w ten sposób. Przetestuj wygląd i działanie strony pod kątem błędów renderowania, braku stylizacji, niedziałających interakcji na stronie i innych problemów. jeżeli napotkasz na problemy, cofnij wprowadzone zmiany, coż – pozostaje Ci czekać na oficjalną kategoryczne załatanie problemu przez sam WordPress.

Idź do oryginalnego materiału