Dmitriy Kononov
ვისაუბროთკონტაქტი

სიახლეები და ანალიზი

PHP2Shell: რას ვამოწმებ ჩემს სერვერებზე, როცა მთელი მსოფლიო PHP-ში ხვრელს კეტავს

php2shell-ის კვირას ვარჩევ: რა გამოაქვეყნეს PHP-მ, Cloudflare-მა, Ubuntu-მ, Docker-მა და GitLab-მა, და რა სიით ვამოწმებ სერვერებს, რომლებზეც პასუხს ვაგებ.

21 ოქტომბერს PHP-ის პროექტმა თავად ინტერპრეტატორში ორი ხვრელის გასწორება გამოუშვა, CVE-2026-109618 და CVE-2026-109619, და მათ php2shell დაარქვეს. მათი საშუალებით სერვერზე კოდის გაშვება ლოგინისა და პაროლის გარეშე შეიძლება, საფრთხის ქვეშაა ყველა ვერსია PHP 5.4-დან დაწყებული. თუ თქვენს კომპანიას PHP-ზე აქვს საიტი, პანელი ან შიდა სერვისი, ამ კვირაში მათი განახლება იყო საჭირო. ქვემოთ მოგიყვებით, როგორ გადის ასეთი კვირები ჩემთან.

რა მოხდა და რატომ გადაიტანეს რელიზი ერთი დღით

Simon Willison-მა 21 ოქტომბერს PHP Foundation-ის შეტყობინება მოკლედ გადმოსცა: 20 ოქტომბერს, დაახლოებით 15:00 UTC-ზე, CVE-ის ნომრები ფორუმებზე გაჟონა არასწორი შეფასებით 10.0 (რეალური 9.2-ია), და პროექტმა რელიზი 22-დან 21 ოქტომბერზე გადაიტანა. ერთ-ერთმა ფირმამ, რომელმაც დაუცველობის შესახებ შეატყობინა, Calif-მა, შეცდომით გამოაქვეყნა ვიდეო მუშა ექსპლოიტით. იქვეა Wiz-ის ქრონოლოგია: დაუცველობა 19 აგვისტოს იპოვეს, 24 აგვისტოს კი PHP-ის გუნდს აცნობეს.

Cloudflare-მა 21 ოქტომბერს მექანიზმი ახსნა: ორივე ხვრელი იმაშია, როგორ ეპყრობა PHP მეხსიერებას შეცდომის დროს. აქედან ორი შენიშვნა, რომლებსაც სტიკერზე დავიწერდი. პლაგინის ან საიტის კოდის განახლება არ შველის, თავად PHP უნდა გასწორდეს. თუ PHP-ს ჰოსტინგი ემსახურება, განახლება მას უნდა მოსთხოვოთ. WAF-ის წესები Cloudflare-მა გასაჯაროებამდე 9 საათით ადრე ჩართო. 23 ოქტომბერს იქვე დაამატეს: გამოჩნდა დაკავშირებული დაუცველობა CVE-2026-115560, ის განახლებულ 8.5.12-შიც არის, და მომდევნო გეგმიურ რელიზში გაასწორებენ.

Ubuntu-მ 21 ოქტომბერს გასწორებული პაკეტების ცხრილი გამოაქვეყნა, php5-დან 14.04-ში php8.5-მდე 26.10-ში, და შემოწმების ბრძანება: apt list '?installed ?name(^php[0-9.]+$)'. იქვეა შეხსენება: unattended-upgrades პაჩს დღე-ღამის განმავლობაში დააყენებს, მაგრამ PHP-ის პროცესები ამით არ გადაიტვირთება. Docker-მა 22 ოქტომბერს განაცხადა, რომ ოფიციალური იმიჯები პაჩებიდან 24 საათში განაახლეს: 8.2.35, 8.3.36, 8.4.27 და 8.5.12. თუ მაშინვე განახლება არ შეგიძლიათ, Docker გირჩევთ სისტემა გამორთოთ და ამაზე FBI-ის რეკომენდაციას იმოწმებს.

GitLab-მა 22 ოქტომბერს გამოაქვეყნა ჩემი აზრით ყველაზე პრაქტიკული ინსტრუქცია. Ubuntu და Red Hat გასწორებას ბექპორტით აწვდიან და ვერსიის ძველ ნომერს ინარჩუნებენ, ამიტომ პაკეტების ვერსიები უნდა შეადაროთ, php -v აქ მოგატყუებთ. მცურავი ტეგის მქონე იმიჯები, მაგალითად php:8.3, docker build --pull-ით თავიდან ააწყვეთ, ხოლო wordpress-ის ან drupal-ის წარმოებული იმიჯები გასწორებას მხოლოდ მაშინ მიიღებენ, როცა მათ მეინთეინერები გამოუშვებენ. და სია იმისა, რაც ავიწყდებათ: შიდა დაშბორდი, მარკეტინგის საიტი, CI-ის იმიჯი.

OpenAI-მ 21 ოქტომბერს კოორდინაცია აღწერა: დაუცველობა Calif-მა მოდელ GPT-5.6 Sol-ის დახმარებით იპოვა, Wiz-მა ის დამოუკიდებლად იპოვა, გასწორებებს PHP-ის მეინთეინერები უძღვებოდნენ, და OpenAI ასეთ აღმოჩენებს მეტს ელის. OVHcloud-მა 21 ოქტომბერს VPS-ის მფლობელებისთვის ინსტრუქცია გამოუშვა: შეამოწმეთ ვერსია, განაახლეთ, გადატვირთეთ PHP-ის სერვისები. Percona-მ 23 ოქტომბერს ანგარიში გამოაქვეყნა: Cloudflare-ის წესები პაჩის გამოსვლამდე იდგა, პაჩი მაშინვე დააყენეს, კომპრომეტაციის კვალი ვერ იპოვეს.

რატომ ეხება ეს კომპანიას, რომელსაც „PHP არ აქვს“

ავიღოთ ავტომობილების გაქირავება. დაჯავშნის საიტი კონტრაქტორმა სამი წლის წინ გააკეთა, ჰოსტინგზე დგას, და რა ენაზეა დაწერილი, კომპანიაში არავის ახსოვს. მფლობელი დარწმუნებულია, რომ PHP არ აქვს. Cloudflare-ის მონაცემებით PHP თითქმის 70% საიტზე მუშაობს, ასე რომ, უმეტესად ის არის, და სწორედ იქ, რაზეც პასუხს არავინ აგებს.

მფლობელისთვის დასკვნა: სია „რა მუშაობს ჩვენთან PHP-ზე“ საჭიროა მანამდე, სანამ შემდეგი ასეთი ხვრელი გამოჩნდება. მშვიდ კვირაში მისი შედგენა ერთ საათში შეიძლება.

როგორ მაქვს ეს მოწყობილი

აშშ-ში PDR-კომპანიისთვის სერვერს 2022 წლიდან ვუვლი: Debian Google Cloud-ში, მასზე MariaDB ბაზა, API, საიტი და ტელეფონია. კომპანიაში უსაფრთხოების საკითხები ჩემთან მოდის, და როცა მსოფლიოში დიდი გატეხვა ხდება, ვამოწმებ, გვეხება თუ არა. ჩვენი ძირითადი ბექენდი Node.js-სა და Python-ზეა, მაგრამ ეს შემოწმებას არ აუქმებს: გავდივარ სიას ყველაფრისა, რაც სერვერზე და კონტეინერებშია, და პაკეტების ვერსიებს ვუყურებ. სერვერს, VPN-სა და ტელეფონიას თავად ვემსახურები, კონტრაქტორთან მიმოწერის გარეშე. 2022 წლიდან აღდგენასთან დაკავშირებული სერიოზული ჩავარდნა არ გვქონია.

სტუდიის საიტი და შიდა სერვისი „ყავა ერთად“ საერთო სერვერზე ცხოვრობს 2 GB მეხსიერებით, Docker-ში Nginx-ის უკან. „ყავა ერთად“-ში რიგი ასეთია: განახლებისას ძველი ეგზემპლარი ჩერდება ახლის გაშვებამდე, ხოლო თუ აწყობას მეხსიერება არ ჰყოფნის, იმიჯი სერვერის გარეთ იწყობა და მზა სახით იტვირთება.

რას გავაკეთებდი ამ კვირაში

  1. შეადგინეთ სია ყველაფრისა, სადაც PHP ცხოვრობს: საიტები ჰოსტინგზე, პანელები, ფორუმები, Docker-იმიჯები, CI-ის იმიჯები.
  2. განაახლეთ პაკეტი და გადატვირთეთ ყველა პროცესი, რომელიც PHP-ს ასრულებს. შეამოწმეთ პაკეტის ვერსია.
  3. კონტეინერები --pull-ით თავიდან ააწყვეთ, წარმოებული იმიჯები კი მეინთეინერთან გამოშვების თარიღით შეამოწმეთ.
  4. თუ ახლა განახლება არ შეიძლება: ჩართეთ WAF, შეზღუდეთ ფაილების ატვირთვა, უკიდურეს შემთხვევაში გამორთეთ სერვისი.
  5. 20-23 ოქტომბრის ლოგებში მოძებნეთ უცნაური მოთხოვნები და ახალი ფაილები, და PHP-ის შემდეგი რელიზის შემდეგ ამ თემას დაუბრუნდით.

და გქონდეთ შემოწმებული სარეზერვო ასლი, რომლიდანაც ერთხელ მაინც აღგიდგენიათ სისტემა, იმ შემთხვევისთვის, თუ გატეხვა მაინც მოხდა.

დაკავშირებული მასალები

რატომ სჭირდება სისტემას ერთი სერვერი, რომელიც მდგომარეობას ინახავს და უფლებებს ამოწმებს: სტატია სერვერი: მონაცემები, წვდომა და პროცესის შესრულება. მიმართულება: ინფრასტრუქტურა, რომლის გამოშვება და აღდგენა შეიძლება. PDR-კომპანიის სერვერი აღწერილია ქეისში აშშ-ში PDR-კომპანიის ტექნიკური პარტნიორი და გვერდზე Debian Google Cloud-ში. იმავე თემაზე: როგორ ვაახლებ Node.js-ს, Python-სა და Next.js-ს, zero trust 30-კაციანი კომპანიისთვის და ბექაპი, რომელიც არავის აღუდგენია. ადრე გავარჩიე, როგორ ავირჩიოთ, რომელი დაუცველობა გავასწოროთ პირველად, და რა არის SBOM და provenance. თუ გაქვთ სერვერი, რომელზეც დიდი ხანია არავინ აგებს პასუხს, მომიყევით, რა დგას მასზე: ამოცანის განხილვა.