From 76e2e41b7ed05fa4c2aa2310a0f208dbcae14b68 Mon Sep 17 00:00:00 2001 From: Nico Schedel <nschedel@sipwise.com> Date: Wed, 21 Jul 2021 11:44:01 +0200 Subject: [PATCH] TT#70901 selenium: add new securtiy tests Add security tests to check if javascript code or any other special symbols gets treated properly Change-Id: Ie4023748ff23976226703a4abcb20c1e641a0695 --- t/selenium/testrun.py | 125 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/t/selenium/testrun.py b/t/selenium/testrun.py index 04b241c7..e94c12de 100644 --- a/t/selenium/testrun.py +++ b/t/selenium/testrun.py @@ -13,6 +13,7 @@ from functions.Collections import delete_subscriber from functions.Collections import delete_domain from functions.Collections import login_csc from functions.Collections import login_panel +from functions.Collections import logout_panel from functions.Collections import logout_csc from functions.Functions import click_js from functions.Functions import create_driver @@ -22,6 +23,7 @@ from functions.Functions import wait_for_loading_screen from functions.Functions import wait_for_invisibility import selenium.common.exceptions from selenium import webdriver +from selenium.webdriver.common.alert import Alert from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.support.ui import WebDriverWait @@ -587,6 +589,129 @@ class testrun(unittest.TestCase): "Time has not been changed") filename = 0 + def test_security(self): + global customers + global filename + filename = "test_speeddial.png" + driver = self.driver + driver.get(os.environ['CATALYST_SERVER']) + print("Try to log in with valid credentials...", end="") + login_csc(driver, "testuser@" + self.domainname, 'testpasswd') + self.assertTrue( + len(driver.find_elements_by_xpath('//*[@id="csc-header-toolbar-main"]')) > 0, "Login wasnt successful") + print("OK") + print("Go to 'Call Forwarding' page...", end="") + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div[contains(., "Call Settings")]').click() + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div/a[contains(., "Forwarding")]').click() + self.assertTrue( + len(driver.find_elements_by_xpath('//*[@id="csc-page-call-forwarding"]')) > 0, "Conference page wasnt opened") + print("OK") + print("Create a call forwarding 'if available'...", end="") + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]/div[1]/button/span[3]/svg[@class="q-spinner text-primary"') + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]//button[contains(., "Add forwarding")]/span/svg') + click_js(driver, '//*[@id="csc-page-call-forwarding"]//div//button[contains(., "Add forwarding")]') + time.sleep(1) + click_js(driver, '/html/body/div[3]/div/div[1]') + print("OK") + print("Create a call forwarding 'if not available'...", end="") + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]/div[1]/button/span[3]/svg[@class="q-spinner text-primary"') + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]//button[contains(., "Add forwarding")]/span/svg') + click_js(driver, '//*[@id="csc-page-call-forwarding"]//div//button[contains(., "Add forwarding")]') + time.sleep(1) + click_js(driver, '/html/body/div[3]/div/div[2]') + print("OK") + print("Create a call forwarding 'if busy'...", end="") + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]/div[1]/button/span[3]/svg[@class="q-spinner text-primary"') + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]//button[contains(., "Add forwarding")]/span/svg') + click_js(driver, '//*[@id="csc-page-call-forwarding"]//div//button[contains(., "Add forwarding")]') + time.sleep(1) + click_js(driver, '/html/body/div[3]/div/div[3]') + print("OK") + print("Try to edit all 'forwared to...' numbers...", end="") + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]/div[1]/button/span[3]/svg[@class="q-spinner text-primary"') + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]//button[contains(., "Add forwarding")]/span/svg') + driver.find_element_by_xpath('//*[@id="csc-wrapper-call-forwarding"]/div[1]//div/span[contains(., "Number")]').click() + fill_element(driver, "/html/body//label//div//input", "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL") + driver.find_element_by_xpath('/html/body//div/button[contains(., "Set")]').click() + wait_for_invisibility(driver, '//*[@id="csc-wrapper-call-forwarding"]/div/div[2]/div[4]/svg') + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div/a[contains(., "Voicebox")]').click() + WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="csc-page-voicebox"]//div//input[@aria-label="Change PIN"]'))) + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div/a[contains(., "Forwarding")]').click() + self.assertTrue( + len(driver.find_elements_by_xpath('//*[@id="csc-page-call-forwarding"]')) > 0, "Conference page wasnt opened") + print("OK") + print("Create a call forwarding 'if available'...", end="") + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]/div[1]/button/span[3]/svg[@class="q-spinner text-primary"') + wait_for_invisibility(driver, '//*[@id="csc-page-call-forwarding"]//button[contains(., "Add forwarding")]/span/svg') + wait_for_invisibility(driver, '//*[@id="csc-wrapper-call-forwarding"]/div/div[2]/div[4]/svg') + driver.find_element_by_xpath('//*[@id="csc-wrapper-call-forwarding"]/div[1]//div/span[contains(., "Number")]').click() + fill_element(driver, "/html/body//label//div//input", "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL") + driver.find_element_by_xpath('/html/body//div/button[contains(., "Set")]').click() + wait_for_invisibility(driver, '//*[@id="csc-wrapper-call-forwarding"]/div/div[2]/div[4]/svg') + driver.find_element_by_xpath('//*[@id="csc-wrapper-call-forwarding"]/div[2]//div/span[contains(., "Number")]').click() + fill_element(driver, "/html/body//label//div//input", "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL") + driver.find_element_by_xpath('/html/body//div/button[contains(., "Set")]').click() + wait_for_invisibility(driver, '//*[@id="csc-wrapper-call-forwarding"]/div/div[2]/div[4]/svg') + driver.find_element_by_xpath('//*[@id="csc-wrapper-call-forwarding"]/div[3]//div/span[contains(., "Number")]').click() + fill_element(driver, "/html/body//label//div//input", "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL") + driver.find_element_by_xpath('/html/body//div/button[contains(., "Set")]').click() + wait_for_invisibility(driver, '//*[@id="csc-wrapper-call-forwarding"]/div/div[2]/div[4]/svg') + print("OK") + print("Go to Admin Panel...", end="") + logout_csc(driver) + login_panel(driver) + print("OK") + print("Open Subscriber and check if Call forwarding doesn't execute malicious code...", end="") + driver.find_element_by_xpath('//*[@id="main-nav"]/li//span[contains(., "Settings")]').click() + driver.find_element_by_xpath('//*[@id="main-nav"]//li/a[contains(., "Subscribers")]').click() + fill_element(driver, '//*[@id="subscriber_table_filter"]/label/input', self.domainname) + WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="subscriber_table"]//tr[1]/td[5][contains(., "' + self.domainname + '")]'))) + click_js(driver, '//*[@id="subscriber_table"]/tbody/tr[1]/td//a[contains(., "Details")]') + driver.find_element_by_xpath('//*[@id="content"]/div//span/a[contains(., "Preferences")]').click() + try: + alert_obj = Alert(driver) + self.assertTrue(alert_obj.text != 'test', "JavaScript Code was executed") + alert_obj.accept() + alert_obj.accept() + alert_obj.accept() + except selenium.common.exceptions.NoAlertPresentException: + pass + driver.find_element_by_xpath('//*[@id="preference_groups"]/div[contains(., "Call Forwards")]').click() + driver.find_element_by_xpath('//*[@id="preferences_table_cf"]/tbody/tr[1]/td[6]/a').click() + self.assertTrue( + "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL" in driver.find_element_by_xpath('//div[@id="collapse_cf"]//table//tr[1]/td[6]/div/div[2]').text, + "Didn't match test string") + driver.find_element_by_xpath('//div[@id="collapse_cf"]/div/table/tbody/tr[1]/td[6]//div/button').click() + driver.find_element_by_xpath('//*[@id="preferences_table_cf"]/tbody/tr[2]/td[6]/a').click() + self.assertTrue( + "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL" in driver.find_element_by_xpath('//div[@id="collapse_cf"]//table//tr[2]/td[6]/div/div[2]').text, + "Didn't match test string") + driver.find_element_by_xpath('//div[@id="collapse_cf"]/div/table/tbody/tr[2]/td[6]//div/button').click() + driver.find_element_by_xpath('//*[@id="preferences_table_cf"]/tbody/tr[4]/td[6]/a').click() + self.assertTrue( + "checking <script>alert('test')</script> asdфывфів123!@#$%^&*()_+[]\|}{;'\":,./?><EOL" in driver.find_element_by_xpath('//div[@id="collapse_cf"]//table//tr[4]/td[6]/div/div[2]').text, + "Didn't match test string") + driver.find_element_by_xpath('//div[@id="collapse_cf"]/div/table/tbody/tr[4]/td[6]//div/button').click() + print("OK") + print("Try to delete call forwarding...", end="") + click_js(driver, '//*[@id="preferences_table_cf"]/tbody/tr[1]/td[8]//a[contains(., "Delete")]') + driver.find_element_by_xpath('//*[@id="dataConfirmOK"]').click() + click_js(driver, '//*[@id="preferences_table_cf"]/tbody/tr[2]/td[8]//a[contains(., "Delete")]') + driver.find_element_by_xpath('//*[@id="dataConfirmOK"]').click() + click_js(driver, '//*[@id="preferences_table_cf"]/tbody/tr[4]/td[8]//a[contains(., "Delete")]') + driver.find_element_by_xpath('//*[@id="dataConfirmOK"]').click() + print("OK") + print("Go back to CSC Panel Call Fowarding page...", end="") + logout_panel(driver) + login_csc(driver, "testuser@" + self.domainname, 'testpasswd') + self.assertTrue( + len(driver.find_elements_by_xpath('//*[@id="csc-header-toolbar-main"]')) > 0, "Login wasnt successful") + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div[contains(., "Call Settings")]').click() + driver.find_element_by_xpath('//*[@id="csc-main-menu-top"]//div/a[contains(., "Forwarding")]').click() + self.assertTrue( + len(driver.find_elements_by_xpath('//*[@id="csc-page-call-forwarding"]')) > 0, "Conference page wasnt opened") + print("OK") + def test_speed_dial(self): global customers global filename