<div dir="ltr"><div><div>Hi,<br><br></div>I was checking my "hardened" build of openwrt to see if any package overrides any compile flags and found that some binaries/libraries have RPATH pointing to buildroot path.<br></div>I'm building in /tmp on my computer, which is world writable on the router,<br>so these "bad" RPATH can be used for privileges escalation.<br><div><div><div>All problematic bin/lib are built with cmake.<br></div><div>Haven't tried yet to fix the build.<br></div><div><br></div><div># cd ./staging_dir/target-mips_34kc_uClibc-0.9.33.2/root-ar71xx/<br></div><div><br># readelf -a ./usr/sbin/uhttpd | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/tmp/openwrt-cc/staging_dir/toolchain-mips_34kc_gcc-4.9-linaro_uClibc-0.9.33.2/lib:]<br># readelf -a ./sbin/uci | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/tmp/openwrt-cc/build_dir/target-mips_34kc_uClibc-0.9.33.2/uci-2014-04-11.1:]<br># readelf -a ./sbin/rpcd | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/tmp/openwrt-cc/staging_dir/toolchain-mips_34kc_gcc-4.9-linaro_uClibc-0.9.33.2/lib:]<br># readelf -a ./usr/lib/lua/ubus.so | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/tmp/openwrt-cc/build_dir/target-mips_34kc_uClibc-0.9.33.2/ubus-2015-01-22/lua/..:/tmp/openwr<br>t-cc/build_dir/target-mips_34kc_uClibc-0.9.33.2/ubus-2015-01-22:]<br># readelf -a ./usr/lib/lua/uci.so | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/tmp/openwrt-cc/build_dir/target-mips_34kc_uClibc-0.9.33.2/uci-2014-04-11.1/lua/..:/tmp/openw<br>rt-cc/build_dir/target-mips_34kc_uClibc-0.9.33.2/uci-2014-04-11.1:]<br><br></div><div><br>3 other binaries have useless rpath<br></div><div># readelf -a ./usr/bin/openssl | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/usr/lib]<br># readelf -a ./usr/lib/libhistory.so | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/usr/lib]<br># readelf -a ./usr/lib/libreadline.so.6.3 | grep RPATH<br> 0x0000000f (RPATH)                      Librairie rpath: [/usr/lib]<br><br><br></div><div>I've used checksec.sh<br><a href="http://www.trapkit.de/tools/checksec.html">http://www.trapkit.de/tools/checksec.html</a><br></div><div>after reading<br><a href="http://blog.oldcomputerjunk.net/2014/evaluating-the-security-of-openwrt-part-1/">http://blog.oldcomputerjunk.net/2014/evaluating-the-security-of-openwrt-part-1/</a><br><br>cd ./staging_dir/target-mips_34kc_uClibc-0.9.33.2/root-ar71xx/<br>wget <a href="http://www.trapkit.de/tools/checksec.sh">http://www.trapkit.de/tools/checksec.sh</a><br>find . -type f -exec file {} \; | grep -i elf | awk -F':' '{print $1}' | xargs -n1 ./checksec.sh --file | grepNARY' | grep -v 'No RPATH'<br><br><br></div><div>My "hardened" compile option are<br>CONFIG_DEVEL=y<br>CONFIG_TOOLCHAINOPTS=y<br>CONFIG_GCC_USE_VERSION_4_8_LINARO=n<br>CONFIG_GCC_USE_VERSION_4_9_LINARO=y<br>CONFIG_PKG_CHECK_FORMAT_SECURITY=y<br>CONFIG_PKG_CC_STACKPROTECTOR_STRONG=y<br>CONFIG_KERNEL_CC_STACKPROTECTOR_STRONG=y<br>CONFIG_PKG_FORTIFY_SOURCE_2=y<br>CONFIG_PKG_RELRO_FULL=y<br><br></div><div>Regards<br></div><div>Etienne<br></div></div></div></div>