LastPass merupakan perangkat lunak yang berguna untuk mengatur password untuk berbagai akun seperti e-mail, medial sosial, internet banking dan sebagainya. LastPass umumnya tersedia sebagai ekstensi browser dan ada juga sebagai aplikasi desktop. Masalahnya, apa yang terjadi jika seseorang yang tak kenal dapat mencuri akun anda melalui LastPass yang anda gunakan?
Hari ini, saya tertarik mengulas masalah Regular Expression (RegEx) pada perangkat lunak LastPass yang dapat mengakibatkan pencurian seluruh username dan password akun yang ada didalamnya. Kelemahan ini ditemukan oleh @avlidienbrunn.
Untuk memahami kelemahan RegEx LastPass yang dulu, sebaiknya mulai pelajari cara kerjanya.
Ini dia sintaks Regex LastPass yang dulu:
/^(.*:\/\/[^\/]+\/.*)@/
Ulasan Regex
/ => Batas awal Regex
^(.*:\/\/[^\/]+\/.*)@ => Isi Regex
/ => Batas akhir Regex
Ulasan Isi Regex
^(.* => Awalan boleh di isi karakter apa saja (boleh berulang kali)
: => Karakter :
\/ => Karakter /
\/ => Karakter /
[^\/]+ => Awalan harus diawali karakter / (boleh berulang kali)
\/ => Karakter /
.*)@ => Awalan boleh di isi karakter apapun (boleh berulang kali) dan akan ditambahkan karakter @
Setelah karakter @, dapat ditambahkan karakter apapun (boleh berulang kali)
Ujicoba
Ujicoba sesuai dengan ulasan awal.
console.log('[+] Ujicoba A')
var url = 'bebas://bebas/bebas/bebas@bebas'
var fixed_url = url.match(/^(.*:\/\/[^\/]+\/.*)@/);
url = url.substring(0, fixed_url[1].length) + url.substring(fixed_url[1].length).replace(/@/g, "%40");
console.log(url)
Luaran
$ nodejs theregex.js
[+] Ujicoba A
bebas://bebas/bebas/bebas%40bebas
Ujicoba untuk memeriksa setiap bagian.
console.log('[+] Ujicoba B')
var url = '2://3/@5/@7';
var fixed_url = url.match(/^(.*:\/\/[^\/]+\/.*)@/);
url = url.substring(0, fixed_url[1].length) + url.substring(fixed_url[1].length).replace(/@/g, "%40");
console.log(url);
Luaran
$ nodejs theregex.js
[+] Ujicoba B
2://3/@5/%407
Pada uji coba ini browser menganggap bahwa:
No 2: Terserah
No 3: *Domain*
No 5: Terserah
No 7: Terserah
Sedangkan LastPass yang dulu menganggap bahwa:
No 2: Terserah
No 3: *Username*
No 5: *Domain*
No 7: *URL Encode*
console.log('[+] Ujicoba C')
var url = 'http://avlidienbrunn.se/@twitter.com/@hehe.php';
var fixed_url = url.match(/^(.*:\/\/[^\/]+\/.*)@/);
console.log(url)
[+] Ujicoba C
http://avlidienbrunn.se/@twitter.com/@hehe.php
Pada uji coba ini browser menganggap bahwa:
No 2: Terserah = http
No 3: *Domain* = avlidienbrunn.se
No 5: Terserah = @twitter.com
No 7: Terserah = @hehe.php
Sedangkan LastPass yang dulu menganggap bahwa:
No 2: Terserah = http
No 3: *Username* = avlidienbrunn.se
No 5: *Domain* = twitter.com
No 7: *URL Encode* = @hehe.php
Dengan kata lain LastPass yang dulu akan menampilkan password sesuai dengan username dan domain yang dimasukkan.
Penanggulangan
LastPass dulu yang lemah ada pada versi 3.2.15. Sedangkan LastPass yang sekarang masih bisa dibilang aman
untuk semua versi, karena para pengembangnya sudah memperbaiki dari sisi klien maupun server. Jika anda masih menggunakan LastPass, ya tentu lebih aman
. Penggunaan password manager lebih baik daripada memiliki banyak akun dengan password yang sama disebut juga dengan password reuse.
Kesimpulan
RegEx merupakan salah satu bagian yang penting dalam mengembangkan perangkat lunak. Namun sayangnya, RegEx tidaklah mudah untuk dipelajari karena sintaksnya yang susah diimplementasikan dan mirip teks yang tidak berguna. Oleh karena itu, mari pelajari RegEx dengan sebaik-baiknya dan jangan asal copy paste dari situs seperti stackoverflow saja. Anda bisa berlatih menggunakan RegEx melalui situs RegEx Crossword.
Saran dan Kritik
Koreksi saya jika saya salah.
Referensi
[+] https://labs.detectify.com/2016/07/27/how-i-made-lastpass-give-me-all-your-passwords/
[+] https://lastpass.com/how-it-works/