
rvia في Raynet ينفّذ أمر find بمعايير بحث منتهية بشكل غير صحيح لتحديد مواقع تثبيتات Java عند استدعاء خيار oracle. يمكن للمهاجمين إنشاء هياكل دليل محددة تتوافق مع معايير البحث غير الصالحة، مما يؤدي إلى تنفيذ الوكيل لملف ثنائي خبيث أثناء عملية اكتشاف Java.

/bin/sh -c "find / -not \( -path '/dev' -o -path '/etc' -o -path '/mnt' -o -path '/tmp' -o -path '/proc' \) \( -path '*/jdk/bin/java' -o -path '*/jdk/jre/bin/java' -o -path '*/jdk-*/bin/java' -o -path '*/jdk*/bin/java' -o -path '*/jdk*/jre/bin/java' \) \( -type f -o -type l \)"
يجب أن يتجاهل هذا الأمر ملفات Java الثنائية في /tmp (وأيضًا في /dev و/etc و/mnt و/proc، لكننا مهتمون بالمثال مع /tmp لأنه قابل للكتابة من الجميع).
لاحظ أن استبعاد الأدلة الأخرى التي قد تكون خطيرة مثل
/homeمفقود.
تكمن المشكلة في أن الجزء الأول من الأمر، المصمم لتجاهل أدلة محددة، يفتقد الحرف * في نهاية هذه الأدلة، بينما يُستخدم الحرف * في بداية الأدلة الأخرى المخصصة للبحث.
يسمح هذا لأي مستخدم بالعبث بملف Java الذي يتم تنفيذه أثناء عملية اكتشاف Java، حيث يتم تشغيل خيار oracle عادةً كوظيفة cron.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

يعود السبب إلى أنه عند استخدام خيار oracle "إذا لم يتم تكوين مسار وقت تشغيل Java في ملف /opt/rvia/rvia.cfg، فإن RayVentory Scan Engine يحاول البحث عنه على أي حال كلما احتاج إليه." وفي مرحلة ما يحاول الحصول على إصدار بيئة Java المثبتة عن طريق تنفيذ java -version.