0207 | WordPress ของคุณอาจไม่ปลอดภัย

วันนี้มีน้องคนนึงใน twitter ส่งบทความจากต่างประเทศมาให้อ่าน ถึงความไม่ปลอดภัยของ theme wordpress บางตัว ซึ่งธีมเหล่านี้ จะมีไฟล์ชื่อ timthumb.php ซึ่งมักจะอยู่ใน folder ชื่อ scripts หรือไม่ก็ includes และการแสดงรูป thumb ในหน้าแรกของธีมเหล่านี้ มักจะแสดงผ่านไฟล์ timthumb.php จะมีมีการแสดงไฟล์รูปตรงๆ ส่วนตัวแล้ว ผมไม่ชอบเลย การแสดงรูปแบบนี้ เพราะมันเปลืองทรัพยากรณ์ ของ server โดยไม่จำเป็น (เดี่ยวท้ายๆจะบอกวิธีแก้ไขให้ครับ) แม้กระทั่งไฟล์รูปอยู่ในเว็บของเราเอง ยังต้องแสดงผ่านไฟล์ๆนี้

โดยการทำงานคร่าวๆก็คือ จะเป็นตัวแสดง thumbnail ในหน้าเว็บของเรา แต่ส่วนใหญ่ จะเจอในหน้าแรกครับ หากรูปที่ดึงนั้น อยู่ภายในเว็บของเรา ก็จะไปเรียกรูปนั้นมาแสดง แต่หากอยู่ภายนอกเว็บ ก็จะดึงรูปมาเก็บไว้ในเว็บของเรา ในโฟลเดอร์ cache โดยมีการจำกัดเอาไว้ว่า จะอนุญาติให้ดึงจากเว็บไหนได้บ้าง หลักๆก็มี flickr.com , picasa.com ,img.youtube.com และเราสามารถเพิ่มได้เอง แต่…. นี่แหละ คือปัญหา เพราะมันมีวิธี ที่ทำให้ดึงรูปจากเว็บเหล่านี้ได้ เพียงแค่ สร้าง sub domain ขึ้นมา ให้มีชื่อ url ที่อนุญาติเหล่านั้น เช่น flickr.com.igolf.in.th หรือ picasa.com.igolf.in.th ซึ่งเมื่อสักครู่ ผมได้ทดสอบดูแล้ว ก็สามารถทำได้จริงๆ ซึ่งเป็นช่องโหว่ให้บรรดาผู้ไม่หวังดี เข้ามาทำ มิดีมิร้าย กับเว็บของเราได้


จึงอยากให้ผู้ที่ได้เข้ามาอ่านบทความนี้ กลับไปสำรวจ ธีม worespress ของตัวเอง ว่ามีไฟล์ดังกล่าวอยู่หรือไม่ หากมี ขอแนะนำให้ทำการ update ให้เป็นเวอร์ชั่นล่าสุดได้ที่ timthumb หรือโหลดเวอร์ชั่น 1.34 ที่ได้แก้ไขปัญหานี้แล้วได้ที่นี่ครับ Download (แต่แนะนำให้โหลดเวอร์ชั่นล่าสุดจากเว็บผู้พัฒนาครับ) เมื่อโหลดมาแล้ว ให้เอาไปแทนที่ไฟล์ timthumb.php ของเก่าได้เลยครับ

คราวนี้ จะมาบอกวิธีแก้ไขธีม โดยการแสดงรูปไม่ต้องผ่านไฟล์ timthumb.php กันบ้าง โดยส่วนใหญ่แล้ว รูปที่แสดงจะอยู่ภายในเว็บของเราเองกันทั้งนั้น ซึ่งไม่จำเป็นเลย ที่จะต้องแสดงผ่านไฟล์ php
ให้เปิดไฟล์ index.php ของ theme ที่ใช้งานอยู่ครับ แล้วหาตรงที่แสดงรูป ประมาณว่า

<img src="<?php echo bloginfo('template_url'); ?>/scripts/timthumb.php?src=<?php echo get_post_image(); ?>&amp;w=211&amp;h=163&amp;zc=1&amp;q=100&amp;a=t" alt="<?php the_title(); ?>" class="aligncenter" />

หรือให้หา

timthumb.php?src=

เมื่อเจอแล้ว ก็ให้ดูใน tag img ครับ จากตัวอย่าง ผมจะแก้ไขใหม่ให้เป็น

<img src="<?php echo get_post_image(); ?>" width="211" height="163" alt="<?php the_title(); ?>" class="aligncenter" />

หรือของบางคน อาจจะไม่ใช่ฟังก์ชั่น get_post_image() ก็ได้ ให้ดูจากของเดิมครับ โดยฟังก์ชั่นตรงนี้ มันจะไปเอา url ของรูปออกมา โดยขนาดความกว้าง และสูง ให้ดูจากของเดิม w คือความกว้าง h คือ สูง แค่นี้ ก็จะดึงรูปแบบตรงๆแล้วครับ เมื่อแก้ไขเสร็จแล้ว ก็ให้ลบไฟล์ timthumb.php ทิ้งไปได้เลย

ลองไปอ่านในฉบับภาษาอังกฏษได้ที่นี่ครับ ซึ่งเนื้อหาคงเยอะกว่าของผม
Many WordPress blogs at risk from image-based zero-day vulnerability