
عرض تعليمي لثغرة CVE-2017-17917 حقن SQL في Rails، مع إعادة التطبيق خطوة بخطوة وتخفيف الأمان باستخدام الاستعلامات المعلمة.
يوضح المشروع تكرار ثغرة حقن SQL في المعامل id، ويقدم لاحقًا رؤى حول تخفيف وحل هذه المشكلة الأمنية. https://www.cvedetails.com/cve/CVE-2017-17917/?q=CVE-2017-17917
المكدس التقني:
Ruby: 3.2.2
Rails: 7.0.8
Docker 24.0.5
Docker-Compose 1.29.2
PostgreSQL

اخترنا هذا CVE لتسليط الضوء على استمرار حدوث هذه المشكلة في أحدث إصدارات Rails، مما يؤكد أهميتها في أفضل ممارسات التطوير.

المتطلبات:
docker
docker-compose
خطوات بناء المشروع:
sudo docker-compose build

sudo docker-compose run web bundle install

sudo docker-compose run web rails db:create db:migrate db:seed

sudo docker-compose up

انتقل إلى http://localhost:3000/


معامل حقن SQL 1 OR id > 1

باستخدام حقن SQL هذا، يمكن للمهاجم استرداد بيانات المستخدم التي لا يحق له عادةً الاطلاع عليها.
درجة صعوبة التنفيذ: سهل
تكمن المشكلة في دالة المتحكم (controller)، وتحديدًا عند استدعاء جملة where كما يلي:
@clients = Client.where("id = #{params[:id_search]}")
رابط الكود
يتم حل المشكلة باستخدام الأسلوب التالي:
@clients = Client.where(id: "#{params[:id_search]}")
رابط الكود
sudo docker-compose run web rspec
