Skip to content

CVE-2022-45875: Apache DolphinScheduler vulnerable to Improper Input Validation leads to RCE

Introduction

Improper Input Validation leads to command injection/RCE in Apache DolphinScheduler has been found and registered as #CVE-2022-45875

The affected version 3.0.1 and prior versions; version 3.1.0 and prior versions.

What is Apache DolphinScheduler

Apache DolphinScheduler is a modern data workflow orchestration platform with a powerful user interface, dedicated to solving complex task dependencies in the data pipeline and providing various types of jobs available out of the box.

Build the lab

I’m using docker on Ubuntu server 20.04

Install docker

  • apt update

  • apt install docker && docker-compose

Setup DolphinScheduler

  • DOLPHINSCHEDULER_VERSION=3.0.0

  • docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -d apache/dolphinscheduler-standalone-server:"${DOLPHINSCHEDULER_VERSION}"

Verify the container is running:

  • docker ps -a

Now open the following link in your browser:

Reproduce the vulnerability

As we can understand from the advisor and from the static analysis and the patch diffing, the vulnerability existed in the Alert script plugin which is an alert that happens based on specific settings. The alert has multiple types, one of the types is “script” where you are telling the software to run the following alert (which will run the script) if those settings happened.

Create a bash script

  • First, we need to create a bash script that we will use for the alarm

  • Access the docker container

sudo docker exec -it <container_id> bash

  • Go to /tmp

cd /tmp

  • Create the bash script, I’m making the script to create a file just as a way to check if the alarm got triggered or not.

echo "touch /tmp/alarm001finished" > alarm001.sh

  • Change the permissions of the script so Apache DolphineScheduler can access it.

    chmod 777 alarm001.sh

Create a tenant

  • Assign the Tenant to the admin user

Create the alarm

  • '; echo "This is a shell injection attack" > /tmp/injection.txt; #

Create the project

  • Under project we can run the process we want that eventually it will trigger the alarm which it’s vulnerable to command injection.

Create workflow definition

  • Click on the project name “proj_001”

  • Go to workflow definition

  • Drag and Drop shell

  • Once you drop it, it will open this

  • In the script you can write whatever you like, it’s what the shell process will do.

  • Now confirm

  • After the confirm, it will look like this, click save

  • It will ask you for Workflow basic information

  • After you click confirm, it will take you to this

  • Click that button to make this workflow online

  • You can notice the color changed.

  • Click on the start button

  • The notification strategy can be all or success which means when or based on what the alarm will be triggered.

  • Click confirm, it will take you to the Workflow instance

Check docker

  • ls

  • You can see “alarm001finished” and this is the file created by alarm001.sh script

  • Also, you can see injection.txt, this is the file created by the command injection.

Static Analysis

Let’s analyze the source code of the alarm script plugin.

  • Download the source code from here

https://github.com/apache/dolphinscheduler/archive/refs/tags/3.0.0.zip

  • Go to dolphinscheduler-3.0.0\dolphinscheduler-alert\dolphinscheduler-alert-plugins\dolphinscheduler-alert-script\src\main\java\org\apache\dolphinscheduler\plugin\alert\script\ScriptSender.java

  • The class starts with defining some variables

  • This method will get the value of those parameters from ScriptParamsConstants.java

  • Here it will do six things

1. validate script path in case of injections

2. Check if the file existed in the first place

3. Check that the script is a file

4. We have an array called cmd here where the execution of the script happens and the injection as well.

5. We have an if statement checks if there is no error, it will set the alert status to true and the alert message.

6. Finally, if there is any error we the alarm message with the exit code, and the error will be logged as well.

We are interested in point number 4.

String[] cmd = {"/bin/sh", "-c", scriptPath + ALERT_TITLE_OPTION + "'" + title + "'" + ALERT_CONTENT_OPTION + "'" + content + "'" + ALERT_USER_PARAMS_OPTION + "'" + userParams + "'"};
        int exitCode = ProcessUtils.executeScript(cmd);

The injection happens because this constructs a shell command by concatenating the scriptPath, title, content, and userParams strings without validating or sanitizing them.

For more understanding let’s see how the cmd variable value will look like in case of valid data input.

  • scriptPath = alarm001.sh

  • ALERT_TITLE_OPTION = -t

  • ALERT_CONTENT_OPTION = -c

  • ALERT_USER_PARAMS_OPTION = -p

The final result:

/bin/sh -c /path/to/alarm001.sh -t 'title' -c 'content' -p 'paramtest'

The developers assume that the input will be between ' ' therefore anything between single quotes ' ' can’t be escaped or injected.

BUT if the attacker has the ability to close the single quotes ' ' first, after that inject a command, it will be treated as a separate command by the /bin/sh

So, with our payload, the final result will look like this:

/bin/sh -c /path/to/script.sh -t 'title' -c 'content' -p ''; echo "This is a shell injection attack" > /tmp/injection.txt; #'

How to test this?

Go to your terminal (you can test inside the docker container itself) and try this command

/bin/sh -c /path/to/script.sh -t 'title' -c 'content' -p '; echo "This is a shell injection attack" > /tmp/injection.txt; #'

Nothing will happen, the injection.txt file won’t be created.

Now try it like this

/bin/sh -c /path/to/script.sh -t 'title' -c 'content' -p ''; echo "This is a shell injection attack" > /tmp/injection.txt; #'

You will find that the injection.txt is created.

Patch Diffing

You can check the changes on the vulnerable endpoint ScriptSender.java from here:

https://github.com/apache/dolphinscheduler/commit/1b7000281e28a44d4de3ed60c3c872582e3d7cb3

  • They added space in the comments

  • Removed the cmd array from here

  • Here they added three if statements, basically those statements check if the parameter value contains a single quote '


    if it is, the alarm won’t be executed therefore we will not move to line 102 and execute the command constructed in the cmd array variable.

    also, the code will log the error and set the message to “shell script illegal user params” and the userParams value.

Is there a bypass for this?

I don’t think so, I tried. every time you try to inject anything without escaping the single quotes ' ' it will be treated as a string as we saw before in the Static analysis.

Mitigation

Users should upgrade to version 3.0.2 or 3.1.1.

Final Thoughts

There is not much to say about this. Command injection is always my favorite vulnerability, this is really easy to reproduce and exploit.

The issue is solutions like this are not always public therefore you will find more use for it when you find such a solution inside the network company during internal pentesting for example.

Also, another restriction here is that you will need to create a malicious alarm, and to do that you need permissions, after that almost any user can exploit this.

I will show you later how to get RCE and gain access, so stay tuned and join vsociety 😏.

Resources:

#Apache #DolphinScheduler

About Version 2 Digital

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.

Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

About VRX
VRX is a consolidated vulnerability management platform that protects assets in real time. Its rich, integrated features efficiently pinpoint and remediate the largest risks to your cyber infrastructure. Resolve the most pressing threats with efficient automation features and precise contextual analysis.

Complete Guide to SafeDNS AppBlocker for Granular Web Filtering Control

SafeDNS AppBlocker is a web filtering tool that enables precise control over your filtering settings, making it an excellent option to consider. SafeDNS AppBlocker has a list of 100+ apps divided into 14 groups for easier management, making it easier to block specific apps or ecosystems.

With SafeDNS AppBlocker, you can block individual apps or entire ecosystems or groups of apps/ecosystems. This gives you complete control over what apps are accessible, ensuring that you and your users are protected from harmful content and potential security threats.

AppBlocker VS. Categories

AppBlocker settings have a higher priority than Category settings in SafeDNS, which means that if an app is blocked by AppBlocker, that setting will override any Category settings that apply to the same app.

For instance, let’s say you have allowed access to social media apps by Categories settings, but you have also blocked access to Instagram by AppBlocker. In this scenario, Instagram will be blocked, even though it belongs to a category that is allowed.

It’s crucial to note that AppBlocker works one way only. If an app is blocked by Category settings, AppBlocker won’t allow access to that app. In such cases, it’s better to use the Allowlists to explicitly allow access to specific apps, regardless of their category.

AppBlocker VS. Allow/Denylists

AppBlocker functionality works alongside the Allow/Denylists to provide granular control over app and website access. While AppBlocker offers a more flexible approach to web filtering by allowing you to block individual apps or entire ecosystems/groups of apps, the Allow/Denylists enable you to explicitly allow or block specific websites or apps, irrespective of their category.

One crucial thing to note is that the Allow/Denylists have a higher priority than AppBlocker settings. This means that if a group of apps is blocked by AppBlocker, but an app from this group is in the Allowlist, the user will have access to the app because the Allowlist settings take precedence.

Whether you want to block social media apps during work hours, prevent access to gambling or adult content, or simply manage app usage, SafeDNS AppBlocker is the perfect solution. Its easy-to-use interface and customizable features make web filtering a breeze, helping you stay safe and secure online.

About Version 2 Digital

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.

Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

About SafeDNS
SafeDNS breathes to make the internet safer for people all over the world with solutions ranging from AI & ML-powered web filtering, cybersecurity to threat intelligence. Moreover, we strive to create the next generation of safer and more affordable web filtering products. Endlessly working to improve our users’ online protection, SafeDNS has also launched an innovative system powered by continuous machine learning and user behavior analytics to detect botnets and malicious websites.

Everything You Need to Know About SafeDNS Categories

One of the key features of SafeDNS is its ability to categorize websites into different categories based on their content and purpose. In this blog post, we’ll take a closer look at SafeDNS Categories and explore how they work, both alone and in combination with other SafeDNS features.

So, how exactly do SafeDNS Categories work? Basically, when you try to access a website, SafeDNS checks its URL against its database of categorized websites. If the website falls into a blocked category, access is denied. If it’s in an allowed category, access is granted. Simple, right? SafeDNS Categories are super handy, especially when it comes to controlling internet access in a safe and secure way.

SafeDNS Categories and the Allow/Denylist:

Another great feature of SafeDNS is the Allow/Denylist. This is a list of websites that are either explicitly allowed or blocked, regardless of their category. SafeDNS Categories and the  Allow/Denylist work together to provide granular control over website access. SafeDNS Categories do not override the Allow/Denylist.

How the Allowlist Only Feature Works:

The Allowlist only feature is a setting in SafeDNS that allows you to block all websites except for those that are explicitly listed on the Allowlist. This is perfect for organizations that want to restrict website access to only a select few sites. You can be sure that your employees or students are only accessing the websites that you’ve deemed appropriate.

How Force Safe Search and Force Restricted Mode for Youtube Work:

SafeDNS offers a Safe Search feature that filters out any explicit content from search results on popular search engines such as Google, Bing, and Yandex. This ensures that your employees or students are not exposed to inappropriate content while browsing the web. In addition, SafeDNS offers a Restricted Mode feature for YouTube, which filters out any age-inappropriate videos on the platform. With these powerful features, you can ensure a safe and secure browsing experience for your users, and have peace of mind knowing that your organization’s web filtering policies are being enforced.

SafeDNS Categories are a powerful tool for controlling internet access and enforcing company policies. With SafeDNS Categories, the  Allow/Denylist, Allowlist only setting, Safe Search, and Restricted Mode for Youtube, you can customize your web filtering settings to meet your organization’s specific needs. SafeDNS is a great way to ensure a safe and secure internet environment for your employees or students.

About Version 2 Digital

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.

Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

About SafeDNS
SafeDNS breathes to make the internet safer for people all over the world with solutions ranging from AI & ML-powered web filtering, cybersecurity to threat intelligence. Moreover, we strive to create the next generation of safer and more affordable web filtering products. Endlessly working to improve our users’ online protection, SafeDNS has also launched an innovative system powered by continuous machine learning and user behavior analytics to detect botnets and malicious websites.

Finding PaperCut MF and NG servers

PaperCut recently revealed that two products in its popular line of print server software contain severe vulnerabilities currently being exploited in the wild. Reported via the Trend Micro Zero Day Initiative, these vulnerabilities can be exploited by unauthenticated attackers to achieve remote code execution as the SYSTEM user (CVE-2023-27350/ZDI-CAN-18987) or information disclosure, including user information and password hashes (CVE-2023-27351/ZDI-CAN-19226).

What is the impact?

With a CVSS score of 9.8 (“critical”), CVE-2023-27350/ZDI-CAN-18987 exists in the SetupCompleted class and can be leveraged for unauthenticated remote code execution due to improper access control. The Application Server and Site Server components of PaperCut MF and NG product versions 8.0 and later contain this flaw.

CVE-2023-27351/ZDI-CAN-19226 has been assigned a CVSS score of 8.2 (“high”) and exists in the SecurityRequestFilter class as a flaw in the authentication algorithm, allowing for unauthenticated information disclosure. The Application Server component of PaperCut MF and NG product versions 15.0 and later contain this flaw.

PaperCut’s website claims over 130 million users of their products across almost 90,000 organizations in almost 200 countries, including government, commercial, and educational users. Coupled with the substantial list of affected product versions and exploitation of these vulnerabilities already observed happening in the wild, the impact could be quite broad. Trend Micro will defer disclosing more details on these vulnerabilities until next month in order to give PaperCut customers time to patch.

While a definitive indicator of compromise doesn’t exist in detecting exploitation of these vulnerabilities on a target, PaperCut does offer some clues one can look for.

Are updates available?

Last month, PaperCut released patched versions 20.1.7, 21.2.11, and 22.0.9 which fix these vulnerabilities. Older unsupported/end-of-life versions will not be receiving a patched update.

For admins who cannot patch immediately, PaperCut does provide a mitigation for CVE-2023-27351/ZDI-CAN-19226, but none is available currently for CVE-2023-27350/ZDI-CAN-18987.

How do I find potentially vulnerable PaperCut services with runZero?

From the Services inventory, use the following prebuilt query to locate all PaperCut MF and NG servers in your network:

_asset.protocol:http and protocol:http and (http.body:"PaperCut MF is a print management system" OR last.http.body:"PaperCut MF is a print management system" OR http.body:"PaperCut NG is a print management system" OR last.http.body:"PaperCut NG is a print management system")

As always, any prebuilt queries are available from your runZero console. Check out the documentation for other useful inventory queries.

About Version 2 Digital

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.

Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

About runZero
runZero, a network discovery and asset inventory solution, was founded in 2018 by HD Moore, the creator of Metasploit. HD envisioned a modern active discovery solution that could find and identify everything on a network–without credentials. As a security researcher and penetration tester, he often employed benign ways to get information leaks and piece them together to build device profiles. Eventually, this work led him to leverage applied research and the discovery techniques developed for security and penetration testing to create runZero.

Don’t Delay Zero Trust! There’s Too Much at Stake.

In today’s fast-paced and ever-changing digital landscape, cybersecurity has become a critical concern for businesses of all sizes. With cyber threats becoming increasingly sophisticated and frequent, companies cannot afford to take a passive approach to security. The threat landscape and attack surface of organizations has immensely increased over the past few years.

In recent years, the concept of “Zero Trust” has gained significant traction as an effective security strategy for businesses looking to protect their assets and data. But despite its benefits, many companies still delay its implementation, putting themselves at risk. We’ll explore why companies shouldn’t delay Zero Trust and the potential consequences of doing so.

The State of Cybersecurity Today

Before we dive into zero trust and its challenges, let’s have a look at the state of cybersecurity to have an idea of what are we dealing with in terms of cybersecurity threats and data breaches.

According to ESENTIRE’s official Cybercrime report the average cost of cybercrime is predicted to hit $8 trillion in 2023 and exponentially rise to $10.5 Trillion by the year 2025.

As per IBM Security X-Force Threat Intelligence Report 2022, the most attacked region is the Asia Pacific accounting for approximately 31% of the incidents recorded by Incident Response.

Incidents by regions - zero trust

Figure 1. Incident By Regions 2020-2022. Source IBM X-Force

Further investigations by IBM revealed that Data extortion was the most common attack impact on organizations with phishing being the top initial access vector of compromise identified in 41% of cybersecurity incidents.

Further statistics by Verizon data breach report states that Ransomware attacks have increased by 13% as compared to the last 5 years.

It is quite evident from the above stats that cybersecurity incidents and data breaches won’t stop and will continue to rise at the same frequency as they were previously. To battle against high volume and complex cybersecurity attacks organizations must adopt a proactive approach and utilize security architectures and models like zero trust to mitigate and contain the previously mentioned attacks.

What is Zero Trust?

Zero Trust is a security framework that emphasizes the principle of “never trust, always verify.” It is designed to provide a comprehensive security approach that protects assets and data by ensuring that no user, device, or application is automatically trusted, regardless of whether they are inside or outside the corporate network. Zero Trust operates under the assumption that every access request is potentially malicious and should be thoroughly verified before granting access.

In a nutshell “The Zero Trust” model is built around three core principles:

  1. Identify
  2. Verify
  3. Enforce

The first principle, identify, involves identifying all users, devices, and applications that require access to resources. This involves creating a comprehensive inventory of all assets, including data, applications, and services, and mapping out their relationships with each other.

The second principle, verify, involves thoroughly verifying the identity and security posture of all users, devices, and applications before granting access. This involves implementing strong authentication mechanisms, such as multi-factor authentication (MFA) and continuously monitoring all access requests for signs of suspicious activity.

The third principle, enforce, involves enforcing strict access control policies that limit access to resources based on the user’s role, location, and device posture. This involves implementing granular access control policies and micro-segmentation to ensure that each user only has access to the resources they need to perform their job, and nothing more.

Zero Trust is not a single product or solution, but rather a comprehensive security framework that incorporates a range of security measures, such as encryption, network segmentation, and continuous monitoring. It also involves a cultural shift towards a security-centric mindset, where security is seen as a fundamental component of business operations, rather than an afterthought. Zero Trust Architectures are well-suitable and effective for environments that come under the hood of critical infrastructures due to their IT/OT integrations.

Challenges faced by organizations to adopt Zero Trust Model

For more than a decade, the idea of a Zero Trust security architecture has been around but the pace of adopting it has not seen an exponential increase over the past few years. Many organizations lack basic cybersecurity hygiene due to which sooner or later they suffer from an inevitable loss in terms of monetary and reputation.

Let’s demystify and uncover the challenges and the reasons why organizations are still hesitant and delaying adopting the zero trust model despite increasing cybersecurity attacks.

Why do companies delay Zero Trust?

Despite the clear benefits of Zero Trust, many companies delay its implementation for various reasons. One of the primary reasons is the perception that Zero Trust is too complex and time-consuming to implement. Companies may also be hesitant to implement Zero Trust due to the potential disruption to business operations and the need for significant changes to existing security policies and procedures. Additionally, some companies may feel that their existing security measures are adequate, or they may underestimate the severity of cyber threats.

Some of the pertinent challenges faced by organizations to implement zero-trust architectures are discussed below:

  • Complexity: One of the primary challenges of implementing Zero Trust architecture is its complexity. Zero Trust requires an extensive and integrated system of security controls, which is time-consuming and resource intensive. The architecture must be customized to fit each organization’s unique infrastructure, which can add a layer of complexity. The complexity part is typically decreased if the organization has clearly defined trust boundaries for traffic inflows and outflows, their critical assets are identified and a holistic approach towards security is being adopted by intensive information security programs.
  • Cost: Another significant challenge is the cost of implementing Zero Trust architecture. The architecture requires the integration of several security solutions such as firewalls, intrusion detection systems, and multifactor authentication tools, which can be expensive. On the other hand, the cost also increases if an organization has to replace legacy systems with new ones. Organizations must also allocate sufficient resources to maintain and upgrade the architecture.
  • Lack of skilled personnel: Zero Trust architecture requires skilled IT personnel who are experienced in cybersecurity practices. Unfortunately, there is a shortage of cybersecurity professionals, making it challenging for organizations to find the right people to implement and maintain the architecture. Often sometimes the internal controls, processes, and policies are too vague or hard to understand and the relevant teams lose their actual objective to protect and implement the desired security controls.
  • Culture: Zero Trust architecture requires a significant shift in an organization’s security culture. The architecture requires all users to adopt new security practices and mindsets, which can be challenging to achieve. Organizations must provide extensive training and awareness programs to ensure that employees are equipped with the necessary skills to implement and maintain Zero Trust.
  • Perception of low risk: Many organizations perceive themselves as low-risk targets for cyber-attacks, leading to a lack of urgency in implementing Zero Trust architecture. This perception often results from a lack of understanding of the potential risks and impacts of a cyber-attack, leading to inadequate investments in cybersecurity solutions.

The risks of delaying Zero Trust

Delaying the implementation of Zero Trust can have severe consequences for companies. With cyber threats becoming increasingly sophisticated and frequent, companies that rely on traditional security measures are at greater risk of security breaches. Hackers can exploit vulnerabilities in the network and gain unauthorized access to sensitive data, resulting in significant financial losses, reputational damage, and legal liabilities.

The consequences of a security breach can be devastating for companies, both in the short and long term. In addition to financial losses, companies may face legal action, regulatory fines, and damage to their reputation, which can have long-lasting effects on their business operations.

Implementing Zero Trust can be a challenging process, but the benefits far outweigh the challenges. Zero Trust provides a comprehensive security approach that ensures the protection of assets and data, regardless of the location or user. By implementing Zero Trust, companies can reduce the risk of security breaches and improve their overall security posture. Zero Trust can also help companies meet compliance requirements and improve their ability to respond to security incidents.

Conclusion

Organizations must take cybersecurity seriously and adopt advanced security solutions such as Zero Trust architecture to protect their data and resources from cyber-attacks. While the implementation of Zero Trust architecture is complex and comes with its own set of challenges and problems, the benefits of implementing it far outweigh the costs. Organizations must carefully consider the risks and rewards of Zero Trust architecture and implement it in a way that ensures the protection of critical resources and data. By doing so, organizations can build a robust and secure cybersecurity posture that protects them from ever-evolving cyber threats.

About Version 2 Digital

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.

Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

About Portnox
Portnox provides simple-to-deploy, operate and maintain network access control, security and visibility solutions. Portnox software can be deployed on-premises, as a cloud-delivered service, or in hybrid mode. It is agentless and vendor-agnostic, allowing organizations to maximize their existing network and cybersecurity investments. Hundreds of enterprises around the world rely on Portnox for network visibility, cybersecurity policy enforcement and regulatory compliance. The company has been recognized for its innovations by Info Security Products Guide, Cyber Security Excellence Awards, IoT Innovator Awards, Computing Security Awards, Best of Interop ITX and Cyber Defense Magazine. Portnox has offices in the U.S., Europe and Asia. For information visit http://www.portnox.com, and follow us on Twitter and LinkedIn.。

×

Hello!

Click one of our contacts below to chat on WhatsApp

×