Skip to content

Commit 8de71d0

Browse files
author
Shamal Faily
committed
Fix uncontrolled data used in path expression risk
1 parent 4aa4d0d commit 8de71d0

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

cairis/bin/cimport.py

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,14 @@ def file_import(importFile,mFormat,overwriteFlag,session_id = None):
123123
if overwriteFlag == None:
124124
overwriteFlag = 1
125125

126+
from cairis.core.Borg import Borg
126127
from cairis.mio.ModelImport import importSecurityPatternsFile, importAttackPattern,importTVTypeFile,importDirectoryFile,importRequirementsFile, importRiskAnalysisFile, importUsabilityFile, importAssociationsFile, importProjectFile, importDomainValuesFile, importComponentViewFile, importSynopsesFile,importProcessesFile,importAssetsFile,importLocationsFile,importModelFile,importMisusabilityFile,importDataflowsFile,importStoriesFile
127128

128129
normalised_import_file = os.path.abspath(importFile)
130+
b = Borg()
131+
tmp_dir_abs = os.path.abspath(b.tmpDir)
132+
if (os.path.commonpath([tmp_dir_abs, normalised_import_file]) != tmp_dir_abs):
133+
raise ARMException('Invalid import file path: ' + importFile)
129134

130135
try:
131136
ET.fromstring(open(normalised_import_file).read())
@@ -134,43 +139,43 @@ def file_import(importFile,mFormat,overwriteFlag,session_id = None):
134139

135140
msgStr = ''
136141
if (mFormat == 'securitypattern' or mFormat == 'Security Pattern'):
137-
msgStr += importSecurityPatternsFile(importFile,session_id)
142+
msgStr += importSecurityPatternsFile(normalised_import_file,session_id)
138143
elif (mFormat == 'attackpattern' or mFormat == 'Attack Pattern'):
139-
msgStr += importAttackPattern(importFile,session_id)
144+
msgStr += importAttackPattern(normalised_import_file,session_id)
140145
elif (mFormat == 'tvtypes' or mFormat == 'Threat and Vulnerability Types'):
141-
msgStr += importTVTypeFile(importFile,int(overwriteFlag),session_id)
146+
msgStr += importTVTypeFile(normalised_import_file,int(overwriteFlag),session_id)
142147
elif (mFormat == 'directory' or mFormat == 'Threat and Vulnerability Directory'):
143-
msgStr += importDirectoryFile(importFile,int(overwriteFlag),session_id)
148+
msgStr += importDirectoryFile(normalised_import_file,int(overwriteFlag),session_id)
144149
elif (mFormat == 'requirements' or mFormat == 'Requirements'):
145-
msgStr += importRequirementsFile(importFile,session_id)
150+
msgStr += importRequirementsFile(normalised_import_file,session_id)
146151
elif (mFormat == 'riskanalysis' or mFormat == 'Risk Analysis'):
147-
msgStr += importRiskAnalysisFile(importFile,session_id)
152+
msgStr += importRiskAnalysisFile(normalised_import_file,session_id)
148153
elif (mFormat == 'usability' or mFormat == 'Usability'):
149-
msgStr += importUsabilityFile(importFile,session_id)
154+
msgStr += importUsabilityFile(normalised_import_file,session_id)
150155
elif (mFormat == 'misusability' or mFormat == 'Misusability'):
151-
msgStr += importMisusabilityFile(importFile,session_id)
156+
msgStr += importMisusabilityFile(normalised_import_file,session_id)
152157
elif (mFormat == 'associations' or mFormat == 'Associations'):
153-
msgStr += importAssociationsFile(importFile,session_id)
158+
msgStr += importAssociationsFile(normalised_import_file,session_id)
154159
elif (mFormat == 'project' or mFormat == 'Project data'):
155-
msgStr += importProjectFile(importFile,session_id)
160+
msgStr += importProjectFile(normalised_import_file,session_id)
156161
elif (mFormat == 'domainvalues' or mFormat == 'Domain Values'):
157-
msgStr += importDomainValuesFile(importFile,session_id)
162+
msgStr += importDomainValuesFile(normalised_import_file,session_id)
158163
elif (mFormat == 'architecturalpattern' or mFormat == 'Architectural Pattern'):
159-
msgStr += importComponentViewFile(importFile,session_id)
164+
msgStr += importComponentViewFile(normalised_import_file,session_id)
160165
elif (mFormat == 'synopses' or mFormat == 'Synopses'):
161-
msgStr += importSynopsesFile(importFile,session_id)
166+
msgStr += importSynopsesFile(normalised_import_file,session_id)
162167
elif (mFormat == 'processes' or mFormat == 'Processes'):
163-
msgStr += importProcessesFile(importFile,session_id)
168+
msgStr += importProcessesFile(normalised_import_file,session_id)
164169
elif (mFormat == 'assets' or mFormat == 'Assets'):
165-
msgStr += importAssetsFile(importFile,session_id)
170+
msgStr += importAssetsFile(normalised_import_file,session_id)
166171
elif (mFormat == 'locations' or mFormat == 'Locations'):
167-
msgStr += importLocationsFile(importFile,session_id)
172+
msgStr += importLocationsFile(normalised_import_file,session_id)
168173
elif (mFormat == 'dataflows' or mFormat == 'Dataflows'):
169-
msgStr += importDataflowsFile(importFile,session_id)
174+
msgStr += importDataflowsFile(normalised_import_file,session_id)
170175
elif (mFormat == 'stories' or mFormat == 'Stories'):
171-
msgStr += importStoriesFile(importFile,session_id)
176+
msgStr += importStoriesFile(normalised_import_file,session_id)
172177
elif (mFormat == 'all' or mFormat == 'Model' or mFormat == 'Model file (.xml)'):
173-
msgStr += importModelFile(importFile,int(overwriteFlag),session_id)
178+
msgStr += importModelFile(normalised_import_file,int(overwriteFlag),session_id)
174179
else:
175180
raise ARMException('Input model type ' + mFormat + ' not recognised')
176181
return 0

0 commit comments

Comments
 (0)